C 运行时使用什么数据结构来存储有关类型大小等变量的信息?

Jee*_*van 5 c runtime

c 运行时使用什么数据结构来存储有关变量的信息,如类型、大小等

前任:

void foo(){
  int bar=0, goo=44;
  int*q, *p = &goo;
  //some code follows

  bar = goo + bar*9; 
  ...
  q=p;
  ... 
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我们有局部变量 bar 和 goo,当控制权到达 foo 函数时,它们将在堆栈上分配。但是,运行时稍后将如何确定当这些变量被引用时,这些变量是某某类型和某某大小?

das*_*ght 4

运行时不保留任何此类信息 - 它被编译成编译器生成的二进制代码作为常量。编译器知道每种类型的大小,因此它知道如何生成正确的机器代码来清理堆栈、访问数组元素、访问结构体的字段等。无需在运行时保留此信息,因为二进制代码已经包含所有适当的指令。