当前位置: 首页 > news >正文

C++_sizeof的相关知识点

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

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

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);
}

输出的是

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

3.结构体会自动对其

#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;
}

输出的是

结构体内部的每个成员都根据其自然对齐边界进行对齐。也就是可能在成员之间插入填充字节。结构体本身的总大小也会根据其最大对齐边界的成员进行对齐(比如结构体成员包含的最长类型为int类型,那么整个结构体要按照4的倍数对齐),以便在数组中正确对齐。//由于padding size=4+4+4=12
12

3.空结构体的size为1

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

http://www.lryc.cn/news/416626.html

相关文章:

  • Istio Proxy的Envoy代理架构中,Upstream提供的功能是:
  • LeetCode 热题 HOT 100 (015/100)【宇宙最简单版】
  • 【HarmonyOS】鸿蒙应用实现截屏
  • Conda包依赖侦探:conda inspect命令全解析
  • 数模——灰色关联分析算法
  • Python爬虫技术 第27节 API和RESTful服务
  • 音视频入门基础:WAV专题(4)——FFmpeg源码中获取WAV文件音频压缩编码格式、采样频率、声道数量、采样位数、码率的实现
  • 环境变量在Conda中的魔法:控制包安装的秘诀
  • VS Code C/C++ MSVC编译器
  • 【技巧】IDEA 个性化配置
  • `pytest` 中一些常用的选项
  • fme从json中提取位置到kml中
  • 在Ubuntu 18.04上安装和配置pgAdmin 4服务器模式的方法
  • NiFi :1 初识这把“十年一剑”的利器
  • Pyside6实战教程专栏目录
  • 【Dash】使用 Dash Design Kit (DDK) 创建图表
  • C++ 几何算法 - 向量点乘,叉乘及其应用
  • Taro学习记录(具体项目实践)
  • ICML 2024 | 矛与盾的较量!北大提出提示无关数据防御保护算法PID
  • Oracle聚合函数LISTAGG和WM_CONCAT简介
  • 【Unity】多种寻路算法实现 —— BFS,DFS,Dijkstra,A*
  • 十大游戏设计软件:创意实现的利器
  • Pandas高级操作:多级索引、窗口函数、数据透视表等
  • mysql源码编译启动debug
  • 吴恩达机器学习-C1W3L2-逻辑回归之S型函数
  • P-one新增火焰图-为性能测试开启新视野
  • CTF-web基础 TCP/UDP协议
  • sql常用语法总结
  • 实验八 题目描述 从键盘上输入任意一个整数(正负数皆可),判断该整数的绝对值是否为回文数。
  • IsaacLab | Workflow 中 rsl_rl 的 play.py 脚本精读