有没有一种方法可以获取堆上先前分配内存的大小?
例如:
//pseudo-code
void* p = operator new (sizeof(int) * 3);
unsigned size = getSomeHow(p);
有没有一种方法可以获取堆上先前分配内存的大小?
例如:
//pseudo-code
void* p = operator new (sizeof(int) * 3);
unsigned size = getSomeHow(p);
并非所有时候都可以这样做,因为operator new()
可以以任何合理的方式进行重载,甚至可能不使用运行时堆。
如果在Visual C++中使用malloc()
实现operator new()
,则可以使用_msize()
。
size_t
变量的字节数”? - sharptoothmax(sizeof(double), sizeof(void*))
或类似的东西,这样代码才能在1024位(或其他)计算机上移植吗? - sharptoothnew
运算符,调用malloc()
并将大小存储在全局的std::map<void*, size> alloc
中。然后,这个getSomeHow()
函数将按照您的要求进行操作:
getSomeHow(void *p){
return alloc[p];
}
stdlib.h
中的相同)。然后将其编译为动态库(dll),并告诉系统加载你的malloc库。不幸的是,我不知道如何在Windows 7中完成这个最后一步。也许这里有人可以帮忙。 - Ben