我通过包装原始函数并仅添加Console.log以显示内存地址,大小和分配的总内存来覆盖Javascript(emscripten)中的Module._malloc和Module._free。
我发现新函数仅捕获对Module._malloc和Module._free的Javascript调用,而没有捕获对malloc()和free()的c ++级调用。我想知道为什么。
根据Ofria先生在这里https://stackoverflow.com/a/34057348/4806940的回答,Module._malloc和Module._free是c ++的malloc()和free()的等效代码。
我正在使用emscripten 1.35.0
编辑:这是我如何在javascript中包装函数
var _defaultMalloc = Module._malloc;
var _defaultFree = Module._free;
var _totalMemoryUsed = 0;
var _mallocTracker = {};
Module._malloc = function(size) {
_totalMemoryUsed += size;
var ptr = _defaultMalloc(size)
_mallocTracker[ptr] = size;
console.log("MALLOC'd @" + ptr + " " + size + " bytes -- TOTAL USED " + _totalMemoryUsed + " bytes");
return ptr;
}
Module._free = function(ptr) {
var size = _mallocTracker[ptr];
_totalMemoryUsed -= size;
console.log("FREE'd @" + ptr + " " + size + " bytes -- TOTAL USED " + _totalMemoryUsed + " bytes");
return _defaultFree(ptr);
}