【发布时间】:2016-05-07 03:19:21
【问题描述】:
我目前正在做一个学校项目,我试图了解free() 函数背后的操作。
malloc 将在堆中分配一个块。
如果我们想释放这个块,这个块是否会完全设置为'0' 值(使用 brk)
或
是否仅将其设置为“可用”以允许对其进行擦除(数据替换...)
【问题讨论】:
标签: c memory memory-management heap-memory
我目前正在做一个学校项目,我试图了解free() 函数背后的操作。
malloc 将在堆中分配一个块。
如果我们想释放这个块,这个块是否会完全设置为'0' 值(使用 brk)
或
是否仅将其设置为“可用”以允许对其进行擦除(数据替换...)
【问题讨论】:
标签: c memory memory-management heap-memory
free 只释放内存,它不会用0-s 填充它。
在释放它之后,写入或读取该内存将导致未定义的行为。
【讨论】:
除了@Viktor Simkó 回答free 将删除标题并将其添加回空闲内存列表。如果它与周围的空闲块形成一个更大的块,当用户需要更大的块时,这些块将被添加在一起以提供更大的块。如果整个页面现在是空闲的,分配器很可能会将页面返回给操作系统。
【讨论】: