如何在javascript(emscripten)中覆盖c ++ malloc / free?

时间:2019-05-08 11:19:44

标签: c++ emscripten

我通过包装原始函数并仅添加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);
}

0 个答案:

没有答案