C++_sizeof的相关知识点

1.指针的大小永远是固定的,取决于处理器位数,32位就是 4 字节,64位就是 8 字节

2.数组作为函数参数时会退化为指针,大小要按指针的计算

cpp 复制代码
int func(char array[]) {
    printf("sizeof=%d\n", sizeof(array));
    printf("strlen=%d\n", strlen(array));
}

int main() {
    char array[] = "Hello World";
    printf("sizeof=%d\n", sizeof(array));
    printf("strlen=%d\n", strlen(array));
    func(array);
}

输出的是

cpp 复制代码
//字符串数组要算上末尾的 '\0'
sizeof=12
strlen=11
/退化为指针
sizeof=8
strlen=11

3.结构体会自动对其

cpp 复制代码
#include<iostream>
#include<string>
struct AlignedStruct {
    char a;   // 本来1字节,padding 3 字节
    int b;    //  4 字节
    short c;  // 本来 short 2字节,但是整体需要按照 4 字节对齐(成员对齐边界最大的是int 4) ,
    //所以需要padding 2,总共: 4 + 4 + 4
};
int main(void)
{
	printf("%d\n",sizeof(AlignedStruct));
	system("pause");
	return 0;
}

输出的是

cpp 复制代码
结构体内部的每个成员都根据其自然对齐边界进行对齐。

也就是可能在成员之间插入填充字节。

结构体本身的总大小也会根据其最大对齐边界的成员进行对齐

(比如结构体成员包含的最长类型为int类型,那么整个结构体要按照4的倍数对齐),以便在数组中正确对齐。

//由于padding size=4+4+4=12
12

3.空结构体的size为1

1的理由:在 C++ 中,当你定义一个空结构体(即不包含任何成员变量的结构体)时,sizeof(EmptyStruct) 返回 1。这是因为 C++ 标准要求每个不同的对象必须占用不同的地址,即使是空结构体。因此,编译器会为空结构体分配一个字节的内存,以确保每个实例都有一个唯一的地址。

相关推荐
api茶飘香17 分钟前
守护应用边界:通过反射API实现安全的输入输出过滤
java·开发语言·python·安全·django·virtualenv·pygame
杀死一只知更鸟debug18 分钟前
策略模式的小记
java·开发语言·策略模式
七十二五19 分钟前
matlab数据批量保存为excel,文件名,行和列的名称设置
经验分享·算法·matlab·青少年编程·矩阵·excel
efls11119 分钟前
Qt_了解Qt Creator
开发语言·qt
请揣满RMB23 分钟前
Qt常用控件——QRadioButton和QCheckBox
开发语言·c++·qt
阿巴~阿巴~23 分钟前
C_深入理解指针(五) —— sizeof和strlen的对比、数组和指针笔试题解析、指针运算笔试题解析
c语言·开发语言·数据结构·算法
爱吃桃子的ICer1 小时前
[UVM]3.核心基类 uvm_object 域的自动化 copy() compare() print() pack unpack
开发语言·前端·ic设计
爱吃龙利鱼1 小时前
web群集--nginx常见的几种负载均衡调度算法的配置过程和效果展示
运维·算法·nginx·云原生·负载均衡
ever_up9732 小时前
EasyExcel的导入与导出及在实际项目生产场景的一下应用例子
java·开发语言·数据库
吴天德少侠3 小时前
c++返回一个pair类型
开发语言·c++