编译器如何在c中评估sizeof运算符

mez*_*zda 3 c c++ compiler-construction sizeof

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

Gra*_*and 8

编译器只知道原始数据类型的大小; 这种知识从根本上构建在编译器中.

对于传统的固定大小的数组和复杂的数据类型(结构和类),它只是将组成原语的大小和帐户相加以进行任何必要的填充.见http://en.wikipedia.org/wiki/Data_structure_alignment

sizeof()在大多数情况下,计算在编译时完成.例外情况是变长数组(C99中的新数组),一旦知道了元素数,就会在运行时计算它.