社区
C语言
帖子详情
struct 大小?
clockwise3
2004-11-21 11:43:01
typedef struct
{
double dx;
char cx;
}
test;
int main(int argc, char* argv[])
{
int i = sizeof(test);
return 0;
}
执行后i值不是12 却是16,何解?
...全文
106
5
打赏
收藏
struct 大小?
typedef struct { double dx; char cx; } test; int main(int argc, char* argv[]) { int i = sizeof(test); return 0; } 执行后i值不是12 却是16,何解?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
greenteanet
2004-11-21
打赏
举报
回复
其实楼主的问题是内存对齐问题,您可以到http://dev.csdn.net/article/article/48/48195.shtm看看,里面详细讲了为什么会出现内存对齐。
ice_lover
2004-11-21
打赏
举报
回复
与编译器有关,要内存补齐,按楼主给出的补齐结果应为12。但整个struct的大小应为结构中size最大元素的倍数,所以再补4结果为16
zwzzj
2004-11-21
打赏
举报
回复
应该与编译器有关.
ma100
2004-11-21
打赏
举报
回复
在搜索中查询 内存对齐
clockwise3
2004-11-21
打赏
举报
回复
不过如果写成
typedef struct
{
char cx;
double dx;
}
test;
int main(int argc, char* argv[])
{
int i = sizeof(test);
return 0;
}
执行后i值是12了 怎么用内存对齐解释呢?
struct
结构体
大小
计算
struct
结构体
大小
计算 计算结构体
大小
需要分为两步: 一、确定内存对齐单位 (1)CPU周期 WIN vs qt 默认8字节对齐 Linux 32位 默认4字节对齐,64位默认8字节对齐 (2)结构体最大成员(基本数据类型变量) (3)预编译指令#pragma pack(n)手动设置 n–只能填1 2 4 8 上面三者取最小的,就是实际对齐单位(这里的“实际对齐单位”是我为了方便...
mm_
struct
简介
一、什么是mm_
struct
??? 内存描述符也用一个结构体表示,这个结构体的名字叫做mm_
struct
(内存描述符),linux就是通过mm_
struct
这个结构体来实现内存管理。 一个进程的虚拟地址空间主要由两个数据结构来描述,一个是最高层次的mm_
struct
,一个是较高层次的vm_ares_
struct
。最高层次的mm_
struct
结构描述了一个进程的整个虚拟地址空间。较高层次的结
C++,
struct
大小
的问题
利用sizeof计算
struct
的
大小
的时候,要考虑内存对齐
计算
struct
的
大小
结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的内存空间。和数组不一样的是,结构体的
大小
不是所有成员
大小
简单的相加,需要考虑到系统在存储结构体变量时的地址对齐问题.
struct
stu1 { int i; char c; int j; }先介绍一个相关的概念——偏移量。偏移量指的是结构体变量中成员的地址和结构体变量地址的差。结构体
大小
等于最后一个成员的
结构体
struct
的
大小
计算
所以对于 S1 结构体
大小
为 2*3=6,至于为什么第二个 char,多的那个字节不丢到,就是遵循第三个原则,就是结构体
大小
结果要为成员中最大字节的整数倍。而对于 B,先不要管 A a,也就是先去掉 A a 成员结构体 B 算出其为 8,所以最后结果为 8+16=24;再看一个:就是当结构体成员变量是另外一个结构体时,只要把结构体中成员为另一结构体作为整体相加就行。因为 int 占 4 个,而 char 已经占了一个,不够,所以那三个只能多余占位。注意: 为什么 仅仅改变了结构体成员的顺序,结果不一样?
C语言
70,021
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章