社区
进程/线程/DLL
帖子详情
内存分配粒度,页的大小,对齐
jadyzdr
2010-10-14 09:12:29
我知道现在的系统一般内存分配粒度是64kb,也的大小是4k,但是不明白他们分配的时候有个对齐,对于这个对齐怎么的原理,还有,分配粒度和页是用来干什么的,和内存分配什么关系,
...全文
1032
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好呢?这就是需要对齐的原因。
memalign的作用
转自:http://hi.baidu.com/narshben/item/ca95ca1bf43d90466926bbf5 ZZ: http://gs5689.blogbus.com/logs/36655475.html 在GNU系统中,malloc或realloc返回的内存块地址都是8的倍数(如果是64位系统,则为16的倍数)。如果你需要更大的
粒度
,请使用memalign或
memalign的作用【转】
本文转载自:https://blog.csdn.net/lvwx369/article/details/41726415 转自:http://hi.baidu.com/narshben/item/ca95ca1bf43d90466926bbf5 ZZ: http://gs5689.blogbus.com/logs/36655475.html 在GNU系统中,malloc...
字节
对齐
/内存
对齐
/
对齐
粒度
其实标题里面的三个关键字说的都是同一个东西。也就是C++中类和结构体在内存中的分配策略,专业术语可以称之为“
对齐
模数(Alignment Modules)”。
对齐
模数分为三类: 1.自身
对齐
模数,也就是类或结构体中成员的
大小
,1,2,4,8之中的一个,对应BYTE WORD DWORD QWORD。 2.指定
对齐
模数,也就是IDE指定的默认
对齐
模, 在MS系列IDE中,默认为8。不过
内存分配
粒度
vs内存分
页
大小
分配
粒度
:表示每次请求内存的时候最小给分配多少,比如32位操作系统基本上每次分配的是64K
大小
。 分
页
大小
:表示的是
页
面的
大小
,32位操作系统是4K是内存管理的最小单位。 例如: 假设你要请求6k = 4K + 2K的空间,操作系统会一次分配64K的空间放着,又因为内存最小操作单位是4K,所以实际上给你分配了8K=4K + 4K,剩下的56K放着有需要了再给你。
进程/线程/DLL
15,465
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章