繁体   English   中英

指针数组的C ++内存分配

[英]C++ memory allocation for an array of pointers

我有一个涉及内存分配的问题。 假设我创建了一个像这样的指针数组。

int **numbers = new int *[1024*1024];

我原以为这需要8MB内存(Mac 64位上的8字节指针),但事实并非如此。 仅在为每个指针分配值时分配内存。 因此,如果我将所有指针都置空,那么我会看到8MB被分配。

for(int i=0; i<1024*1024; i++)
{
    numbers[i] = NULL;
}

我的应用程序如何知道哪些指针在没有为其分配内存的情况下分配了值?

从C ++的角度来看,你的内存是在那里分配的。 您最好不要通过操作系统报告来混淆自己。

你的“应用程序”肯定不知道它是否分配了一个指针 - 只是你作为程序员有责任在分配之前不使用任何指针。

如果对可能的背景信息感到好奇,请在此处或其他文章中查看内存过量使用

您正在观察操作系统的一项功能,称为过度使用会计

默认情况下,未分配的内存仅获取保留的地址空间(特定于进程的虚拟内存)。 只有在为其分配值时,页面才会实际映射到页表中的物理地址。

我的猜测是内存被分配,但没有显示在ps / top结果[不确定mac中的哪个工具]因为页面没有被触及。 chk所有与内存相关的列

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM