居于x86_64的linux系统的malloc和free函数的实现

本文探讨了内存管理的基本概念,包括malloc的工作原理及其在内存分配中的作用,虚拟内存技术及其实现方式,并介绍了Linux系统中如何通过brk和sbrk系统调用来管理堆内存。此外还提到了如何利用getrlimit系统调用来获取和设置进程的资源限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文如下:

http://blog.codinglabs.org/articles/a-malloc-tutorial.html

模仿。

1,malloc开辟一块内存,返回一个指针。该指针可以用于释放这块内存。

2,虚拟内存地址技术:让每个进程独享全部的内存。物理内存地址:虚拟地址经过段位偏移映射到物理地址,所有进程共同分配物理地址。

3,linux与window都是以‘’页‘’(一个连续几百个字节的内存,有页头,页偏移等做查找)为内存的最小单位,使用‘’页表‘’(常驻在内存中的数据结构)来完成虚拟内存到物理内存的映射。这是内存的分页机制。磁盘使用什么机制呢???

4,在heap上,从起始地址到break指针是已经映射过的可用内存,从break到结尾是没有映射不可使用的内存。

5,linux通过系统调用函数,brk(void* addr),sbrk(int length)来使用break指针。

int brk(void* addr)传入一个地址,将break的地址设置为改参数,成功返回0,失败为-1.

void* sbrk(int length)传入一个增量,成功返回break增加前的地址,失败返回(void*)-1,即:-1的地址。如果传入增量为0,则可以拿到break当前的地址。

6,使用系统调用getrlimit获得或者修改当前进程的软资源限制和硬资源限制。硬资源限制是软资源限制的上限。

struct rlimit {
    rlim_t rlim_cur;  /* Soft limit */
    rlim_t rlim_max;  /* Hard limit (ceiling for rlim_cur) */
};

7,




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值