简单实现

对malloc和free的思考

我们两清 提交于 2019-12-05 20:54:26
进程的内存布局: Heap的顶端的限制叫做program break,通过系统调用brk活着sbrk可以想内核申请内存从而改变break,也就是增加或收缩heap的大小。 进程的地址空间所面对的都是虚拟地址,kernel为每个进程维护一个page table,建立了虚拟地址空间的页和物理内存页或swap空间的映射(虚拟内存或物理内存都是以页为单位)。 很重要的一个特点是,虚拟地址空间是连续的! 虚拟内存管理有很多好处:1、进程相互之间或进程与内核之间相互隔离,进程不能操作其他进程的内存空间,更不能操作内核的空间。2、多个进程可以共享内存。 (多个进程执行相同的程序,也就是多个进程的text segment所对应的物理内存是同一份),节约内存。3、进程维护的页表可以更容易的实现内存保护。(标记page table的entry即可) 虚拟内存这块让我想到了,“软件的很多问题都可以靠加一个中间层解决”;o(∩_∩)o 哈哈 下面是一个简单的malloc和free实现,通过系统调用sbrk来实现: 实现细节: 1、在需要的内存块前面追加一小块空间,来存储当前块的大小(貌似都这样) 2、维护两个全局变量,managed_memory_start、所维护内存的起始地址 last_valid_address、所维护内存的最后有效地址,也就是program break 3、free的实现很简单