指针数组的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++的角度来看,您的内存已经分配好了。您最好不要被操作系统报告的内容弄糊涂。
你的"应用程序"肯定不知道它是否分配了指针——只有你作为程序员有责任在分配之前不使用任何指针。
如果对可能的背景感到好奇,可以四处寻找像这里或其他文章中那样的内存过度投入。
您正在观察操作系统的一个功能,称为overcommit accounting。
默认情况下,未分配的内存只能获得保留的地址空间(进程特定的虚拟内存)。只有在为其赋值时,页面才会实际映射到页面表中的物理地址。
我的猜测是内存已经分配,但没有显示在ps/top结果中[不确定mac中的哪个工具],因为页面没有被触摸。chk所有与内存相关的列
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配