Может ли указатель Rust на память, выделенную кучей, иметь значение 0 при компиляции в Wasm?
Когда куча выделяет память в коде Rust, скомпилированном для Wasm, выделяется память в линейной памяти Wasm.
Правильно ли я понимаю, что значение указателя - это смещение в этой памяти? Если да, возможно ли и действительно ли получить значение0
как смещение / указатель?
Простой пример:
let data: Vec<u8> = Vec::with_capacity(123);
let data_ptr = data.as_ptr() as usize;
Могу я предположить data_ptr
не равно нулю или это действительный адрес?
1 ответ
Да, это может быть ноль.
См. Раздел " Передача строки JavaScript в функцию Rust, скомпилированную в WebAssembly", где приведен пример, где она была равна нулю и использовался обходной путь, чтобы избежать конфликта с традиционнымNULL
значение.