社区
进程/线程/DLL
帖子详情
内存分配粒度,页的大小,对齐
jadyzdr
2010-10-14 09:12:29
我知道现在的系统一般内存分配粒度是64kb,也的大小是4k,但是不明白他们分配的时候有个对齐,对于这个对齐怎么的原理,还有,分配粒度和页是用来干什么的,和内存分配什么关系,
...全文
769
6
打赏
收藏
内存分配粒度,页的大小,对齐
我知道现在的系统一般内存分配粒度是64kb,也的大小是4k,但是不明白他们分配的时候有个对齐,对于这个对齐怎么的原理,还有,分配粒度和页是用来干什么的,和内存分配什么关系,
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
riheyljh
2010-10-23
打赏
举报
回复
[Quote=引用 5 楼 riheyljh 的回复:]
引用 1 楼 coding_hello 的回复:
这是个大话题,基本的原因就是效率。
同样是分配4kb内存,那么是从0x100000开始分配4k好呢,还是从0x100001开始分配4k好呢?这就是需要对齐的原因。
为什么要对齐呢,1楼的已经说了,是效率问题,其实你可以看看计算机原理的书籍,现代计算机读取内存的时候,一般只能在偶数边界上开始读,什么意思呢,我们打个比方,在32……
[/Quote]
然后这个变量的值就是前4个字节的
后三位
和后4个字节的
第一位
,这里应该前4个字节的后三个字节和后4个字节的第一个字节!
riheyljh
2010-10-23
打赏
举报
回复
[Quote=引用 1 楼 coding_hello 的回复:]
这是个大话题,基本的原因就是效率。
同样是分配4kb内存,那么是从0x100000开始分配4k好呢,还是从0x100001开始分配4k好呢?这就是需要对齐的原因。
[/Quote]
为什么要对齐呢,1楼的已经说了,是效率问题,其实你可以看看计算机原理的书籍,现代计算机读取内存的时候,一般只能在偶数边界上开始读,什么意思呢,我们打个比方,在32位的机子上,一个int变量变量占用4字节,假如这个变量的真实物理内存地址是0x400005,那计算机在取数的时候会先从0x400004取4个字节,再从0x400008取4个字节,然后这个变量的值就是前4个字节的后三位和后4个字节的第一位,也就是说如果一个变量的地址从奇数开始,就可能要多读一次内存,而如果落在从偶数开始,特别是计算机位数/8的倍数开始,效率就高了!
jadyzdr
2010-10-20
打赏
举报
回复
[Quote=引用 3 楼 hxfjb 的回复:]
个人感觉:
1 对齐和分配粒度类的问题,是相对于虚拟内存分配函数而言的,即virtualAlloc之类的函数。而对于在堆和栈上的内存,就没有这个问题。
2 对齐是上取整,假如你要在基地址为0x10的地方申请内存,那么分配出来的内存是从0x1010的地方开始的。
3 分配的粒度是内存最小分配大小。比如你在0x10的地方申请分配4097个字节的内存,那么实际分配的大小是4097/4k+4K=8K……
[/Quote]
4097/4k+4k=8k。这个怎么算的啊,4097/4k不是等于0吗
还有这句话“对齐是上取整,假如你要在基地址为0x10的地方申请内存,那么分配出来的内存是从0x1010的地方开始”为什么是从1010开始分配啊
hxfjb
2010-10-18
打赏
举报
回复
个人感觉:
1 对齐和分配粒度类的问题,是相对于虚拟内存分配函数而言的,即virtualAlloc之类的函数。而对于在堆和栈上的内存,就没有这个问题。
2 对齐是上取整,假如你要在基地址为0x10的地方申请内存,那么分配出来的内存是从0x1010的地方开始的。
3 分配的粒度是内存最小分配大小。比如你在0x10的地方申请分配4097个字节的内存,那么实际分配的大小是4097/4k+4K=8K的大小。
dxshenhua
2010-10-18
打赏
举报
回复
其实这个“对齐”的说法误导了很多人,比较容易理解的说法应该是向上取整。至于这个“整”是多少,可能是4个字节,也可能是4K.
野男孩
2010-10-16
打赏
举报
回复
这是个大话题,基本的原因就是效率。
同样是分配4kb内存,那么是从0x100000开始分配4k好呢,还是从0x100001开始分配4k好呢?这就是需要对齐的原因。
rpmalloc:用C实现的公共域跨平台无锁线程缓存16字节
对齐
的
内存分配
器
该库提供了用C实现的公共域跨平台无锁线程缓存16字节
对齐
的
内存分配
器。最新的源代码始终可在获得。 由Mattias Jansson( )创建-通过我的支持开发 当前支持的平台: 视窗 苹果系统 的iOS Linux 安卓 ku句 该...
mallocng-draft:Musl libc的nextgen malloc实现工作草案
高级设计该分配器将内存动态地组织成小块平板样式的组,最多由32个相同
大小
的分配单元组成,其状态由位掩码控制,并利用带内和带外元数据的混合将敏感状态与可通过以下方式轻松访问的区域隔离开越界写入,同时避免...
SSCMS管理系统(版本 v7)
1. SSCMS 是一款跨平台、可分布式部署的产品,产品能够运行在各类操作系统之上,同时支持 MySql、SqlServer、PostgreSql以及本地...实现了非常灵活的细
粒度
的、可扩展的、支持用户二次开发扩展的权限控制体系。
内存分配
粒度
vs内存分
页
大小
vs内存空间
当请求一块内存的时候,系统每次分配出来的内存空间的最小度为分配粒,这个分配
粒度
就是
对齐
值,32位机器上是64K
大小
; 而分
页
时,每一
页
在32位机器上是4K,当需要6K的时候,它会将这6K的数据放在两
页
中,一
页
4K,一...
C++
内存分配
与内存
对齐
一、C++程序
内存分配
C/C++程序编译时内存分为5大存储区 栈区,由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。通俗来讲就是函 数中的变量参数等等,即{}中的内容。...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章