社区
C++ 语言
帖子详情
struct和Union的内存分配方式
qq51931375
2009-08-26 08:09:16
那天去面试,问到这个问题,只是回答了一个大概,只是说了C语言中,struct分配的内存是所有的成员变量所占字节之和.
union是占字接数最多的变量.
在C++中struct和union都采用了对齐原则,我想知道这个对齐原则是到底是怎么样的,忘指点,最好给出例子
网上的我看多,很多都是复制别人的,而且说法自相矛盾.
谢谢.
...全文
199
10
打赏
收藏
struct和Union的内存分配方式
那天去面试,问到这个问题,只是回答了一个大概,只是说了C语言中,struct分配的内存是所有的成员变量所占字节之和. union是占字接数最多的变量. 在C++中struct和union都采用了对齐原则,我想知道这个对齐原则是到底是怎么样的,忘指点,最好给出例子 网上的我看多,很多都是复制别人的,而且说法自相矛盾. 谢谢.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
猫已经找不回了
2009-08-26
打赏
举报
回复
[Quote=引用 7 楼 qq51931375 的回复:]
恩 是我错了
还有union呢|?
[/Quote]
union用的不太多,很少要对齐吧,其内部成员都是从[0]开始的。
猫已经找不回了
2009-08-26
打赏
举报
回复
郁闷,我写得不矛盾吧,请耐心看完,如果真有问题请指正。
但是自以为3原则总结的还可以。
wanjingwei
2009-08-26
打赏
举报
回复
学习了
qq51931375
2009-08-26
打赏
举报
回复
恩 是我错了
还有union呢|?
mstlq
2009-08-26
打赏
举报
回复
回楼上,原则二写的是
结构体作为成员
,请问int是结构体吗^_^?
请心平气和慢慢看^_^
qq51931375
2009-08-26
打赏
举报
回复
2:
结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.)
3:收尾工作:结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员的整数倍.不足的要补齐.
等你看完此3条原则,2分钟已经过去,抓紧时间,实战3分钟:
typedef struct bb
{
int id; //[0]....[3]
double weight; //[8].....[15] 原则1
float height; //[16]..[19],总长要为8的整数倍,补齐[20]...[23] 原则3
}BB;
typedef struct aa
{
char name[2]; //[0],[1]
int id; //[4]...[7] 原则1
double score; //[8]....[15]
short grade; //[16],[17]
BB b; //[24]......[47] 原则2
}AA;
上面这段代码是2楼给我的网址里去访问的,我想说的是我弄不明白,这里又产生了自相矛盾,
明明原则2:则结构体成员要从其内部最大元素大小的
整数倍
地址开始存储
但是struct aa中的int id;却是从索引4开始存储的id的值.请问4是8的整数倍吗?
越看越气...哎
mr_leo17895
2009-08-26
打赏
举报
回复
[Quote=引用 2 楼 mr_leo17895 的回复:]
struct的每个成员变量按照指定对齐字节与变量本身字节数中较小的值来对齐
struct整体的大小按照成员变量中字节最小的变量字节数与指定对齐字节中较小的值来对齐
[/Quote]
修改一下,
第二个是...字节最大的变量字节数...
pengzhixi
2009-08-26
打赏
举报
回复
呵呵,帮顶!!加一句,对齐是为了bus时的效率
mr_leo17895
2009-08-26
打赏
举报
回复
struct的每个成员变量按照指定对齐字节与变量本身字节数中较小的值来对齐
struct整体的大小按照成员变量中字节最小的变量字节数与指定对齐字节中较小的值来对齐
mstlq
2009-08-26
打赏
举报
回复
http://blog.csdn.net/hairetz/archive/2009/04/16/4084088.aspx
hairetz写的……
struct
与
union
内存分配
问题
今天在调试代码时,关于
struct
与
union
内存分配
问题产生了疑惑,故上网查询了相关资料,记于此,以便日后查看。
struct
与
union
在
内存分配
的时候,主要区别如下: 前者按照结构体内定义的数据顺序来进行分配内存的,...
struct
和
union
的
内存分配
struct
union
内存分配
Struct
和
Union
区别
一、
Struct
和
Union
有下列区别: 1.在存储多个成员信息时,编译器会自动给
struct
第个成员分配存储空间,
struct
可以存储多个成员信息,而
Union
每个成员会用同一个存储空间,只能存储最后一个成员的信息。 2.都是...
Union
和
struct
以及占据内存问题
主要讲
struct
和
union
以及字节对齐
结构体
struct
和 联合
union
内存分配
转载:... 1.C语言中的结构体 ...结构体是由一系列相同或不同类型的变量组成的集合。...
struct
结构体名{ //
struct
为关键字,“结构体名”为用户定义的类型标识。 数据类型1 成员名1;
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章