问题 Linux和Windows上的malloc_size替代方案


一个人怎么能说出来 void * 指针,在此给定地址上分配的块的大小是多少(先前使用 malloc;在Linux和Windows中)?我希望两个系统肯定能在某处存储这种信息。也就是说,替代 malloc_size 存在于OSX / Darwin上。如果它有帮助,使用gcc / mingw。


2268
2018-06-09 08:31


起源

我认为大小与malloc给你的指针之前的某种结构中的其他东西一起存储。如果没有,它可能是指向这种结构的指针,因为 free() 将需要这样的数据。 - nhahtdh
@nhahtdh是的,我也希望如此,但我确实需要它。 - Cartesius00
@James,如果我在Linux上使用自定义分配器启动你的应用程序,你会怎么做?喜欢 LD_PRELOAD=my_super_allocator.so ./your_app?我的意思是,如果你认为背后有一个预先设定的结构 void*。 - Sergei Kurenkov
可能重复 如何找到sizeof(指向数组的指针) - Jens Gustedt
@JensGustedt:它不是随机指针,而指针本身只显示地址,“创建者”知道有关此特定指针的额外信息。你不会将任何随机指针传递给free()吗?我们这里只讨论malloc和朋友,而不是一般的指针信息功能...... - Anders


答案:


在Windows上,使用MS CRT的东西可以使用 _msize,在Linux上你可以试试 malloc_usable_size...


12
2018-06-09 09:08



也可以看看: blogs.msdn.com/b/oldnewthing/archive/2012/03/16/10283988.aspx - Anders