本文主要是介绍居于x86_64的linux系统的malloc和free函数的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原文如下:
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,
这篇关于居于x86_64的linux系统的malloc和free函数的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!