malloc()和free()是如何工作的?我想知道malloc和free工作。int main() {
unsigned char *p = (unsigned char*)malloc(4*sizeof(unsigned char));
memset(p,0,4);
strcpy((char*)p,"abcdabcd"); // **deliberately storing 8bytes**
cout << p;
free(p); // Obvious Crash, but I need how it works and why crash.
cout << p;
return 0;}如果有可能的话,如果答案是深度的话,我会非常感激的。
3 回答
噜噜哒
TA贡献1784条经验 获得超7个赞
您的进程有一个内存区域,从Address x到Address y,称为堆。你所有的数据都住在这个地区。malloc()保存了堆中所有空闲空间块的一些数据结构,比如一个列表。当您调用malloc时,它会在列表中查找一个足够大的块,返回一个指向它的指针,并记录它不再空闲的事实以及它的大小。当您使用相同的指针调用free()时,free()将查找该块的大小并将其添加回空闲块()列表中。如果调用malloc()而它在堆中找不到足够大的块,则使用BRK()SysCall来增长堆,即增加Address y,并使旧y和新y之间的所有地址成为有效内存。BRK()必须是SysCall;没有办法完全从用户空间完成相同的事情。
malloc() and free() don't work the same way on every O/S.
墨色风雨
TA贡献1853条经验 获得超6个赞
通过sbrk()(Unix调用)从操作系统获取一个内存块。 在该内存块周围创建页眉和页脚,其中包含一些信息,如大小、权限以及下一个和前一个块所在的位置。 当调用malloc时,引用一个指向适当大小的块的列表。 然后返回这个块,并相应地更新标头和页脚。
- 3 回答
- 0 关注
- 563 浏览
添加回答
举报
0/150
提交
取消