社区
C++ 语言
帖子详情
这两个结构体,为什么用sizeof测得的大小会一样呢??
bugzhao
2006-03-06 02:24:51
struct A1
{
int a;
char c1;
char c2;
double d;
};
struct A2
{
//int a;
char c1;
char c2;
double d;
};
int main()
{
cout<<sizeof(A1)<<" "<<sizeof(A2)<<endl
return 0;
}
运行结果为:16 16
可是A2和A1根本不一样啊
...全文
172
6
打赏
收藏
这两个结构体,为什么用sizeof测得的大小会一样呢??
struct A1 { int a; char c1; char c2; double d; }; struct A2 { //int a; char c1; char c2; double d; }; int main() { cout<<sizeof(A1)<<" "<<sizeof(A2)<<endl return 0; } 运行结果为:16 16 可是A2和A1根本不一样啊
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
abblly
2006-03-06
打赏
举报
回复
又是结构对齐,其实CSDN上很多关于这个问题的帖子,可以先搜索,如果找不到再提问。
marenjie
2006-03-06
打赏
举报
回复
字节对齐的关系...结构体的大小一定是其中最宽元素的倍数...
lisypro
2006-03-06
打赏
举报
回复
呵呵,结构体对齐的问题。
菲斯可儿
2006-03-06
打赏
举报
回复
呵呵,结构体对齐的问题。
bugzhao
2006-03-06
打赏
举报
回复
不好意思,在百度上找到答案了,因为我的编译器设置了#pragma pack(8)
我以为默认是设置为#pragma pack(4)呢
bugzhao
2006-03-06
打赏
举报
回复
更郁闷的是,当把A1、A2中的d变量也屏蔽掉后,即改为:
struct A1
{
int a;
char c1;
char c2;
//double d;
};
struct A2
{
//int a;
char c1;
char c2;
//double d;
};
则最终输出结果变为:
8 2
谁能解释一下这是为什么啊??难道跟编译器的地址对齐有关吗?
结构体
中动态内存的管理(malloc和free)
C语言中内存的管理主要是依据malloc和free实现的,其中malloc主要是实现内存的分配,而free则是实现内存的释放。虽然这是我们已经很熟悉的,但是还是存在一些问题。特别是当
结构体
中存在指针的情况下,各种问题也就
会
展现出来。
【C语言】
结构体
的
大小
是如何计算的?(
结构体
对齐详解)
使用
sizeof
计算
结构体
大小
,影响
结构体
内存
大小
的三种因素,
结构体
的对齐规则详解
sizeof
(
结构体
)的分析
一、为什么
结构体
计算这么乱? 答案是字节对齐,计算机存储系统中以Byte为单位存储数据,不同数据类型所占的空间不同,如:整型(int)数据占4个字节,字符型(char)数据占一个字 节, 短整型(short)数据占
两个
字节,等等。计算机为了快速的读写数据,默认情况下将数据存放在某个地址的起始位置,如:整型数据(int)默认存储 在地址能被 4整除的起始位置,字符型数据(char)可以存放在任...
【C语言】什么是
结构体
内存对齐?
结构体
的
大小
怎么计算?
结构体
内存对齐(Struct Memory Alignment)是指编译器在分配
结构体
变量的内存空间时,按照一定规则对
结构体
成员进行排列,以保证
结构体
的访问效率和内存对齐要求。 在计算机中,访问内存的速度是有限的,而且通常是按照特定的字节
大小
进行的。为了提高内存访问的效率,许多计算机体系结构要求特定类型的数据在内存中的地址必须是某个特定值的倍数。这个特定值通常是数据类型的
大小
或者是处理器的字长。
C语言中计算
结构体
的
大小
因此我们似乎很容易就能计算出这个结果:4+20+4+4=32字节但事实上
结构体
的
大小
并不是通过这样简单累加计算的。
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章