新的 () 运算符在使用时在哪个内存段为 prgrammer 分配内存
At which memory segment the new () operator allocates memory for prgrammer when used
例如,当我们写:
int * p = new int[5];
内存将分配到哪个内存段?在C
我知道当我们使用malloc()
时,它会heap
部分中分配内存,但对于C++
我不确定。我读到了这一点,对于从免费存储分配new()
内存和从此链接上的堆分配malloc()
内存。
这个免费商店是什么?它只是内存的一部分吗?有没有像 C 一样包含免费存储的内存管理图表?
你缺少的是C++没有描述,也没有试图描述这些物理机器的细节。C++是一个抽象。C++源代码没有列出计算机要执行的步骤序列:它描述了程序的含义。同样,该语言(通常(不强制要求将此类实现细节作为"堆"。
当它说"免费存储"时,语言标准指的是动态分配的对象所在的存储概念区域。使用你的编译器,在你的计算机上,在这十年中,这可能是你熟悉的内存中的"堆"结构。或者,它可能在其他地方。我们的不是推理在哪里。
最终,您链接到的网站上的文本("如果是新的,内存是从免费存储中分配的,而 malloc(( 内存分配是从堆中完成的"(是完全错误的,这就是为什么您不应该从随机网站学习C++。
C++标准没有指定。
它所说的只是p
具有动态存储持续时间。
实际上,您可能会发现它在"堆"上(这是一个实现概念而不是语言概念(,就像 C 的姊妹函数malloc
在"堆"上分配内存的方式非常相似。
免费存储是两个动态内存区域之一,由新建/删除分配/释放。对象生存期可以小于分配存储的时间;也就是说,释放存储对象可以在不立即初始化的情况下分配内存,并且可以在不立即重新分配内存的情况下销毁。
点击这里了解详情
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配