面试中常被问到对齐方式
Posted AllenSquirrel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试中常被问到对齐方式相关的知识,希望对你有一定的参考价值。
对齐方式
- 第一个成员变量在结构体偏移量为0的地址处
- 其他成员变量要对齐到对齐数的整数倍的地址处,对齐数=min(默认对齐数,成员大小) vs默认对齐数为8(x64)或4(x32) linux下gcc/g++默认对齐数为4
- 结构体总大小为最大对齐数的整数倍
- 如果嵌套结构体,嵌套结构体对齐到自己最大对齐数的整数倍处,结构体大小就是所有最大对齐数(包含嵌套结构体对齐数)的整数倍
附:常见数据类型
类型 | 位 | 范围 |
---|---|---|
char | 1 个字节 | -128 到 127 或者 0 到 255 |
unsigned char | 1 个字节 | 0 到 255 |
signed char | 1 个字节 | -128 到 127 |
int | 4 个字节 | -2147483648 到 2147483647 |
unsigned int | 4 个字节 | 0 到 4294967295 |
signed int | 4 个字节 | -2147483648 到 2147483647 |
short int | 2 个字节 | -32768 到 32767 |
unsigned short int | 2 个字节 | 0 到 65,535 |
signed short int | 2 个字节 | -32768 到 32767 |
long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long int | 8 个字节 | 0 到 18,446,744,073,709,551,615 |
float | 4 个字节 | 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字) |
double | 8 个字节 | 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字) |
long double | 16 个字节 | 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。 |
wchar_t | 2 或 4 个字节 | 1 个宽字符 |
以上是关于面试中常被问到对齐方式的主要内容,如果未能解决你的问题,请参考以下文章