C++ 如何在C++;?

C++ 如何在C++;?,c++,dynamic-memory-allocation,C++,Dynamic Memory Allocation,我知道你必须这样做: int * p; p = new int[10]; //use array delete [] p; 现在我的问题是:既然没有明确说明,怎么可能释放出正确的内存量?操作系统是否跟踪分配的内存及其起始地址?运行库将跟踪分配的内存块。给定new返回的初始指针,可以保证正确解除分配块 虽然这可以在操作系统本身中实现(理论上),但通常不是。操作系统跟踪的是分配给整个进程的页面,而不是在此抽象级别分配的单个块。运行库将跟踪分配的内存块。给定new返回的初始指针,可以保证正确解除

我知道你必须这样做:

int * p;
p = new int[10];

//use array

delete [] p;

现在我的问题是:既然没有明确说明,怎么可能释放出正确的内存量?操作系统是否跟踪分配的内存及其起始地址?

运行库将跟踪分配的内存块。给定
new
返回的初始指针,可以保证正确解除分配块


虽然这可以在操作系统本身中实现(理论上),但通常不是。操作系统跟踪的是分配给整个进程的页面,而不是在此抽象级别分配的单个块。

运行库将跟踪分配的内存块。给定
new
返回的初始指针,可以保证正确解除分配块

虽然这可以在操作系统本身中实现(理论上),但通常不是。操作系统跟踪的是分配给整个流程的页面,而不是在这个抽象级别分配的单个块。

是的,操作系统(或者更可能是库)跟踪

当你分配内存时,操作系统会给你的内存创建一个小的头,它通常就在你分配的内存之前——也就是说,在一个稍微低一些的地址上创建几个字节

释放内存时,它会获取被释放的指针,返回几个字节,并检查描述实际分配内容的结构,包括分配内容的大小。

是的,操作系统(或者更可能是库)会跟踪

当你分配内存时,操作系统会给你的内存创建一个小的头,它通常就在你分配的内存之前——也就是说,在一个稍微低一些的地址上创建几个字节


释放内存时,它会获取被释放的指针,返回几个字节,并检查描述实际分配内容的结构,包括分配内容的大小。

它完全依赖于实现。与常规的malloc()/free()非常相似,正如您所提到的,系统必须保存一些额外的信息。通常,对malloc()或new运算符的调用在指针返回给您之前在内存中设置一个头结构,以便稍后调用free()或delete运算符时,它可以找出您交给它的内存块的情况。

这完全取决于实现。与常规的malloc()/free()非常相似,正如您所提到的,系统必须保存一些额外的信息。通常,对malloc()或new运算符的调用会在指针返回给您之前在内存中设置一个头结构,以便稍后调用free()或delete运算符时,它可以找出您交给它的内存块有什么问题。

这取决于实现,但我认为运行库使用某种内存分配表来跟踪分配的块。

这取决于实现,但我认为运行库使用某种内存分配表来跟踪分配的块。

重复:重复: