c++ - 编译器如何评估 c 中的 sizeof 运算符

标签 c++ c compiler-construction sizeof

尽管在这个论坛和其他与 sizeof 运算符相关的问题上已经提出了几个问题,但我无法得到任何关于编译器如何评估 sizeof 运算符以找到任何数据类型、变量、指针、数组等的大小的答案。如果可能的话还指出了一些可以帮助我详细了解这一点的链接。任何帮助将不胜感激。谢谢。

最佳答案

编译器只是知道原始数据类型的大小;这些知识基本上内置于编译器中。

对于传统的固定大小数组和复杂数据类型(结构和类),它只是将组成基元的大小相加并考虑任何必要的填充。参见 http://en.wikipedia.org/wiki/Data_structure_alignment

在大多数情况下,sizeof() 计算是在编译时完成的。异常(exception)情况是可变长度数组(C99 中的新特性),一旦元素数量已知,它就会在运行时计算。

关于c++ - 编译器如何评估 c 中的 sizeof 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13938086/

相关文章:

c++ - ESENT 二级索引已损坏,必须对数据库进行碎片整理

compiler-construction - 计算一组指令的依赖图

c++ - 带主题的 C/C++ 编译器和编辑器

c++ - 从 cpprest lambda 表达式访问自动变量

c - 需要帮助创建和未知数量的命名管道来拆分和排序数据

c - 为什么将指针值加一不允许在该位置设置值?

c - MS Visual Studio 编译器提供哪些 C99 功能?

c++ - 制作内核的不同方法

c# - 在 C# 中使用 C++ 会有任何性能问题吗?

C++移位运算符优先级怪异