【发布时间】:2021-04-01 07:49:30
【问题描述】:
要求:跟踪分配和删除。每个分配都用两个参数标识,我们暂时称它们为 P1 和 P2。
我使用带有两个附加参数的全局重载放置 new 运算符
void * operator new(size_t size, parameter_1_t p1, parameter_2_t p2);
大小在运行时适当填充。我使用 p1 和 p2 来索引一个二维数组,在该数组中,我将当前使用的内存分配增加为 (p1,p2) 和“大小”。
类似2dArray[p1][p2].increment_current_bytes(size);
现在,我的问题是,当我使用放置删除时,我如何知道要释放的内存大小?我需要知道它以相应地更新二维数组。 试着写这个 -
void * operator delete(void* ptr, size_t size, parameter_1_t p1, parameter_2_t p2);
不起作用,因为 C++ 中没有提供这样的操作符 delete。它希望我在显式调用 operator delete 函数时填写 size。
参考 - https://en.cppreference.com/w/cpp/memory/new/operator_delete
【问题讨论】:
-
我如何知道要释放的内存大小? -- 我认为你需要一些更健壮的东西来实际保留大小信息.在致电
new之后,您是否只是将size信息扔掉?valgrind等工具如何工作?
标签: c++ operator-overloading new-operator delete-operator placement-new