我有一个关于内存分配的问题。假设我创建了一个像这样的指针数组。
int **numbers = new int *[1024*1024];
我原以为这需要 8MB 内存(Mac 64 位上为 8 字节指针),但事实并非如此。仅当为每个指针赋值时才分配内存。因此,如果我 NULL 所有指针,那么我会看到 8MB 被分配。
for(int i=0; i<1024*1024; i++)
{
numbers[i] = NULL;
}
我的应用程序如何知道哪些指针已分配值而不为其分配内存?
从 C++ 的角度来看,你的内存已经分配好了。您最好不要对操作系统报告的内容感到困惑。
你的“应用程序”肯定不知道它是否分配了一个指针——只是你作为程序员有责任在分配之前不使用任何指针。
如果对可能的背景感到好奇,请四处寻找内存过量使用 http://opsmonkey.blogspot.hu/2007/01/linux-memory-overcommit.html就像这里或其他文章一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)