详谈高端内存和低端内存

一、高端内存和低端内存的划分

     Linux物理内存空间分为DMA内存区(DMA Zone)、低端内存区(Normal Zone)与高端内存区(Highmem Zone)三部分。DMA Zone通常很小,只有几十M,低端内存区与高端内存区的划分来源于Linux内核空间大小的限制。

 

 

二、来源:

过去,CPU的地址总线只有32位, 32的地址总线无论是从逻辑上还是从物理上都只能描述4G的地址空间(232=4Gbit),在物理上理论上最多拥有4G内存(除了IO地址空间,实际内存容量小于4G),逻辑空间也只能描述4G线性地址空间。

为了合理的利用逻辑4G空间,Linux采用了31的策略,即内核占用1G的线性地址空间,用户占用3G的线性地址空间。所以用户进程的地址范围从0~3G,内核地址范围从3G~4G,也就是说,内核空间只有1G的逻辑线性地址空间。

如果Linux物理内存小于1G的空间,通常内核把物理内存与其地址空间做了线性映射,也就是一一映射,这样可以提高访问速度。但是,当Linux物理内存超过1G时,线性访问机制就不够用了,因为只能有1G的内存可以被映射,剩余的物理内存无法被内核管理,所以,为了解决这一问题,Linux把内核地址分为线性区和非线性区两部分,线性区规定最大为896M,剩下的128M为非线性区。从而,线性区映射的物理内存成为低端内存,剩下的物理内存被成为高端内存。与线性区不同,非线性区不会提前进行内存映射,而是在使用时动态映射。

三、例子

假设物理内存为2G,则低段的896M为低端内存,通过线性映射给内核使用,其他的1128M物理内存为高端内存,可以被内核的非线性区使用。由于要使用128M非线性区来管理超过1G的高端内存,所以通常都不会映射,只有使用时才使kmap映射,使用完后要尽快用kunmap释放。

对于物理内存为1G的内核,系统不会真的分配896M给线性空间,896M最大限制。下面是一个1.5G物理内存linux系统的真实分配情况,只有721M分配给了低端内存区,如果是1Glinxu系统,分配的就更少了。

MemTotal   1547MB

HighTotal     825MB

LowTotal     721MB

申请高端内存时,如果高端内存不够了,linux也会去低端内存区申请,反之则不行。

 

它虽然只是只企鹅,但它还是很喜欢它敲代码的样子ForEach(Minute in MyLife) MyExperience ++;

转自:http://www.cnblogs.com/encode/p/3551582.html
静态库动态库在编译运行时的行为有所不同。静态库在程序编译时会被连接到目标代码中,而动态库则是在程序运行时才被载入。 静态库对应的lib文件叫做静态库,而动态库对应的lib文件叫做导入库。静态库本身包含了实际执行代码、符号表等信息,而导入库只包含了地址符号表等,用于确保程序能够找到对应函数的基本地址信息。\[1\] 静态库的大小通常比较大,因为它包含了实际执行代码其他必要的信息。而动态库的大小相对较小,因为它只包含了地址符号表等基本信息。\[1\] 使用静态库的程序在编译时会将静态库的代码复制到最终的可执行文件中,因此可执行文件会比较大。而使用动态库的程序在编译时只会包含对动态库的引用,而不会将动态库的代码复制到可执行文件中。这样可以减小可执行文件的大小,并且多个应用程序可以共享同一个动态库的实例,避免了空间浪费。\[3\] 另外,动态库的使用还解决了静态库对程序的更新、部署发布带来的麻烦。当需要更新动态库时,只需要替换动态库文件即可,而不需要重新编译整个程序。这样可以实现增量更新,方便程序的维护升级。\[3\] 综上所述,静态库动态库的主要区别在于编译时运行时的行为不同,静态库在编译时被连接到目标代码中,而动态库在程序运行时才被载入。此外,静态库会增加可执行文件的大小,而动态库可以实现共享增量更新。 #### 引用[.reference_title] - *1* *2* [静态库动态库的区别](https://blog.youkuaiyun.com/sinat_16643223/article/details/114027857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [详谈静态库动态库的区别](https://blog.youkuaiyun.com/weixin_71478434/article/details/126588174)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值