预计阅读本页时间:-
10.4.2 Linux中的内存管理系统调用
POSIX没有给内存管理指定任何系统调用。这个主题被认为是太依赖于机器而不便于标准化。可是,这个问题通过这样的说法被隐藏起来了:那些需要动态内存管理的程序可以使用malloc库函数(由ANSIC标准定义)。那么malloc是如何实现的就被推到了POSIX标准之外了。在一些圈子里,这种方法被认为是推卸责任。
实际上,许多Linux系统有管理内存的系统调用。最常见的列在了图10-14中。brk通过给出数据段之外的第一个字节地址来指定数据段的大小。如果新值比原来的要大,那么数据段变大;反之,数据段缩减。

mmap和munmap系统调用控制内存映射文件。mmap的第一个参数,addr,决定文件被映射的地址。它必须是页大小的倍数。如果这个参数是0,系统确定地址并且返回到a中。第二个参数len指示要映射的字节数。它也必须是页大小的整数倍。第三个参数,prot,确定对映射文件的保护。它可以标记为可读、可写、可执行或者三者的组合。第四个参数,flags,控制文件是私有的还是共享的以及addr是一个需求还是仅仅是一个提示。第五个参数,fd,是要映射的文件的描述符。只有打开的文件是可以被映射的,因此为了映射一个文件,首先必须要打开它。最后,offset告诉从文件中的什么位置开始映射。并不一定要从第0个字节开始映射,任何页面边界都是可以的。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
另一个调用,unmap,移除一个被映射的文件。如果仅仅是文件的一部分撤销映射,那么其他部分仍然保持映射。