mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 02:21:14 +00:00
Better allocator for wasm (#1460)
* Add Arch Linux installation instructions * Enable tracing heap size * Extract heap * Replace linear allocator with buddy allocator * Fix test The purose of this big block is for the tests to test a failure when the block is too big though. The improved buddy allocation strategy results in this block fitting on the heap now. Hence the increase. * Get rid of memcpy in to_vec() * fixup: Style and comments * fixup: Split Linux instructions by distribution To prevent misunderstandings of people executing both. * fixup: Remove unnecessary types and code * fixup: Make Pointers start from 1, remove some panics, code improvements * fixup: Return 0 on errors * fixup: Move loop to separate function * fixup: Use FnvHashMap instead of HashMap * fixup: Fix error handling * fixup: Use current_size() instead of used_size() * fixup: Fix and document allocation offset * fixup: Remove unnecessary multiplication * fixup: Fix comments * fixup: Remove Arch installation instructions * Revert "Fix test" This reverts commit 292c177df8efaa4658293748a13b1ab1c0b76ea8. * fixup: Remove unused code, improve import * fixup: Proper alignment * fixup: Do not use internal constant in public description * fixup: Add comment regarding invariants * fixup: Move assertion to compile-time check
This commit is contained in:
committed by
Sergei Pepyakin
parent
b066d25cc7
commit
1ccb590d18
@@ -132,9 +132,10 @@ pub fn storage(key: &[u8]) -> Option<Vec<u8>> {
|
||||
if length == u32::max_value() {
|
||||
None
|
||||
} else {
|
||||
let ret = slice::from_raw_parts(ptr, length as usize).to_vec();
|
||||
ext_free(ptr);
|
||||
Some(ret)
|
||||
// Invariants required by Vec::from_raw_parts are not formally fulfilled.
|
||||
// We don't allocate via String/Vec<T>, but use a custom allocator instead.
|
||||
// See #300 for more details.
|
||||
Some(<Vec<u8>>::from_raw_parts(ptr, length as usize, length as usize))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -147,9 +148,10 @@ pub fn child_storage(storage_key: &[u8], key: &[u8]) -> Option<Vec<u8>> {
|
||||
if length == u32::max_value() {
|
||||
None
|
||||
} else {
|
||||
let ret = slice::from_raw_parts(ptr, length as usize).to_vec();
|
||||
ext_free(ptr);
|
||||
Some(ret)
|
||||
// Invariants required by Vec::from_raw_parts are not formally fulfilled.
|
||||
// We don't allocate via String/Vec<T>, but use a custom allocator instead.
|
||||
// See #300 for more details.
|
||||
Some(<Vec<u8>>::from_raw_parts(ptr, length as usize, length as usize))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user