C++ sizeof()练习
2024-08-26 02:43:56
class A
{
int a;
short b;
int c;
char d;
};
class B
{
double a;
short b;
int c;
char d;
};
在32位机器上用gcc编译以上代码,求sizeof(A),sizeof(B)分别是多少。
其实不同编译器答案是不一样的。
linux下double的对齐方式是4字节,而windows默认是8字节。。。
linux可以通过如下方式控制对齐方式
class
B
{
double
a;
short
b;
int
c;
char
d;
}__attribute__((aligned(
8
)));
而WINDOWS是通过#pragma pack(n) 来控制编译器按照n个字节对齐。
但是如果按照大家比较能够理解的说法:
根据以下条件进行计算:
1、 结构体的大小等于结构体内最大成员大小的整数倍
2、 结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说double型成员相对于结构体的首地址的地址偏移量应该是8的倍数。
3、 为了满足规则1和2编译器会在结构体成员之后进行字节填充!
那么答案就是:windows下编译答案是C, gcc下编译答案是D
最新文章
- GTest Google的一种白盒单元测试框架 开源项目
- mybatis中的#和$的区别(转)
- 在Django中进行注册用户的邮件确认
- Parse the main function arguments
- ecshop 重置后台密码 MD5+salt
- css整理-05 边框,背景和浮动,定位
- win10离线安装.net framework 3.5
- QQ登入(5)获取空间相册,新建相册,上传图片到空间相册
- ES6 入门系列 - let 和 const 命令
- 开发板ip设置
- linux编程进阶书推荐APUE,UNP
- Android初级教程启动定时器详解
- iOS中 加强日志输出 开发技术总结
- [Android] Android 卡片式控件CardView的优雅使用
- [USACO18DEC]Cowpatibility
- loadrunner 运行场景-场景运行原理
- fastdfs+nginx集群高可用搭建的一些坑!!记录一下
- MySQL中的IFNULL,IF,NULLIF函数
- nginx和apache最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程
- Android网络请求库RetrofitUtils