sizeof 返回类型或对象的字节大小,alignof 获取类型的对齐要求;两者均为编译期操作,用于优化内存布局与访问效率。

在C++中,sizeof 和 alignof 是两个用于获取类型或对象底层信息的关键操作符。它们在编写系统级代码、内存管理、结构体优化等场景中非常有用。
sizeof:获取对象或类型的大小(以字节为单位)
sizeof 返回一个类型或对象在内存中所占的字节数。它可以在编译时求值,不实际运行程序。
使用方式有两种:
对类型:sizeof(类型名) 对变量或表达式:sizeof 表达式 或 sizeof(表达式)
示例:
立即学习“C++免费学习笔记(深入)”;
#include int main() { std::cout << "int 大小: " << sizeof(int) << " 字节n"; std::cout << "double 大小: " << sizeof(double) << " 字节n"; char arr[10]; std::cout << "数组大小: " << sizeof(arr) << " 字节n"; // 输出 10 int x; std::cout << "x 的大小: " << sizeof x << " 字节n"; // 不加括号也可以}
注意:对数组使用 sizeof 时,若在定义作用域内,可正确得到总字节数;但如果传入函数,数组退化为指针,则返回指针大小。
alignof:获取类型的对齐要求
alignof 返回指定类型所需的内存对齐字节数。对齐影响性能和硬件访问规则,尤其在嵌入式或高性能编程中重要。
语法:alignof(类型名)
示例:
立即学习“C++免费学习笔记(深入)”;
#include int main() { std::cout << "int 对齐: " << alignof(int) << " 字节n"; std::cout << "double 对齐: " << alignof(double) << " 字节n"; std::cout << "指针对齐: " << alignof(void*) << " 字节n"; struct alignas(16) Vec4 { float x, y, z, w; }; std::cout << "Vec4 对齐: " << alignof(Vec4) << " 字节n"; // 输出 16}
对齐值通常是2的幂,比如 1、2、4、8、16 等。某些类型(如SIMD向量)可能需要更高对齐。
结合使用场景
在设计结构体或进行内存池分配时,了解大小和对齐能避免浪费或错误。
例如:
struct Data { char c; // 1 字节 // 编译器可能插入 3 字节填充 int i; // 4 字节,需 4 字节对齐};std::cout << "Data 大小: " << sizeof(Data) << "n"; // 通常为 8std::cout << "Data 对齐: " << alignof(Data) << "n"; // 通常为 4
可以通过调整成员顺序减少填充,或使用 alignas 自定义对齐。
基本上就这些。sizeof 和 alignof 是轻量、编译期操作,帮助你理解数据在内存中的布局。掌握它们有助于写出更高效、可移植的C++代码。
以上就是C++如何使用sizeof和alignof获取类型信息的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1475434.html
微信扫一扫
支付宝扫一扫