搜索
编程论坛
→
开发语言
→
C++论坛
→
『 C++教室 』
→ 问个关于内存对齐的问题...
标题:
问个关于内存对齐的问题...
只看楼主
ToBeOOP
等 级:
论坛游侠
威 望:
3
帖 子:106
专家分:181
注 册:2010-7-8
结帖率:
100%
楼主
已结贴
√
问题点数:20 回复次数:8
问个关于内存对齐的问题...
class Funtion {
private:
char a;
int b;
short c;
};
那么他们的排列应该是哪个?
1.OXXX|OOOO|OOXX
2.OXXX|OOOO|XXOO
( X代表补充偏移空出的位置 )
我个人感觉第二种是对的...希望求解
搜索更多相关主题的帖子:
内存
2010-12-14 18:18
迷失的木桶
等 级:
业余侠客
帖 子:52
专家分:230
注 册:2010-5-29
第
2
楼
得分:0
为什么你认为第二个?理由。。
2010-12-14 19:12
ToBeOOP
等 级:
论坛游侠
威 望:
3
帖 子:106
专家分:181
注 册:2010-7-8
第
3
楼
得分:0
我认为是..short是2字节...所以偏移量是2。.所以先偏移2。然后再偏移过的位置上补位
2010-12-14 19:23
laoyang103
来 自:内蒙古包头
等 级:
贵宾
威 望:
19
帖 子:3082
专家分:11056
注 册:2010-5-22
第
4
楼
得分:5
1. OXXX|OOOO|OOXX
我同意第一种 四个字节 首先偏移了1个字节存放char
然后4个存放int 再偏移两个存放short
0表示占用了X 表示空缺
===========深入<----------------->浅出============
2010-12-14 21:27
ToBeOOP
等 级:
论坛游侠
威 望:
3
帖 子:106
专家分:181
注 册:2010-7-8
第
5
楼
得分:0
首部的偏移量应该为0的吧..我看了下..偏移量是自身长度的倍数.如果short的长度为2的话..那么第一种的话则偏移了8...是2的倍数..所以我现在支持第一种= =
2010-12-14 21:49
我菜119
等 级:
青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
第
6
楼
得分:0
回复 5楼 ToBeOOP
如果加上#pragma pack(1)那你认为呢?
愿用余生致力编程
2010-12-15 17:25
ToBeOOP
等 级:
论坛游侠
威 望:
3
帖 子:106
专家分:181
注 册:2010-7-8
第
7
楼
得分:0
那偏移量应该选最小值...但是首部依然不偏移
2010-12-15 17:51
pangding
来 自:北京
等 级:
贵宾
威 望:
94
帖 子:6784
专家分:16751
注 册:2008-12-20
第
8
楼
得分:15
对齐就是把它的地址对齐到访问类型的边界上。
比如 4 个字节的地址就要是 4 的倍数。这个结构的起始地址会被编译器对齐到 4 的倍数上,然后放一个 char,这个 char 不偏移。之后再放 int 的时候,要向后错 3 个字节,以对齐到 4 的倍数上。再放 short 的时候,已经是 4 的倍数了,更是 2 的倍数,也直接放。最后填充 2 个字节,是为了把结束后的地址对齐到 4 的边界上。
2010-12-15 19:34
ToBeOOP
等 级:
论坛游侠
威 望:
3
帖 子:106
专家分:181
注 册:2010-7-8
第
9
楼
得分:0
明白了..谢谢各位的回答....
2010-12-15 21:21
9
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-328964-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.106677 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved