【问题标题】:how does 'free/delete' work? [duplicate]“免费/删除”如何工作? [复制]
【发布时间】:2011-06-23 04:22:38
【问题描述】:

可能的重复:
How does delete work in C++?
C programming : How does free know how much to free?

对于每个动态内存分配,使用“malloc / new”,我们有方法“free / delete”来释放分配的内存。

我的问题是,如果内存分配大小是在运行时确定的并且内存位置不连续,这些内存释放方法如何知道要释放多少内存以及要清除的内存位置是什么?

如果我们只向它们传递一个指向单个位置的指针,是什么使这些函数起作用?

【问题讨论】:

  • 我将此标记为重复的重复,只是为了强调这个问题的普遍性。

标签: memory free dynamic-memory-allocation


【解决方案1】:

他们会跟踪您在内部分配了多少内存。

【讨论】:

    【解决方案2】:

    malloc/new 分配内存时,它还会记录它为指向给定内存位置的指针分配的内存位置和内存量。 free/delete 在你给它一个指针时查找要释放的内存。

    这就是为什么你永远不应该尝试释放你用“+=”或类似的东西移动的指针。

    【讨论】:

    • 注意,不需要有“表格”。可以仅将块的大小与块一起存储,例如在返回的地址之前,并将堆视为此类块的链表。跟踪这些东西的实际方法是高度依赖于实现的,这就是为什么释放/删除任何指针而不是从 malloc/new 获得的指针是未定义行为的部分原因。
    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 2020-12-07
    • 2011-02-28
    • 2021-08-24
    • 2011-03-12
    • 2010-09-24
    相关资源
    最近更新 更多