我知道什么是结构,以及如何制作结构以及为什么要键入定义...
typedef struct Foo {
int a;
char b;
float c;
} Foo;
但我不知道它是如何工作的。当您引用一个元素时,模板是否保存在堆栈中并像查找表一样使用(类似于类的工作方式)?或者这里有其他设计在起作用。
关于 typedef 结构的部分是有争议的。
结构基本上是一种将一堆数据存储在一起的便捷方式。
编译器知道哪些偏移指向哪个元素,并在需要访问元素时将它们烘焙到程序中。由于 struct 结构在运行时无法更改,因此无需使用查找表。
例如,我可以像下面这样编写上面的结构:
char Foo[12];
*((int *) (Foo + 0)) = a;
*((char *) (Foo + 4)) = b;
*((float *)(Foo + 8)) = c;
您可以看到偏移量是手动烘焙的。不需要查找表。当您使用结构时,编译器会自动执行几乎相同的操作。
Astruct
只是一个定义。它定义了数据的排列,但除非您声明该类型的变量,否则它不会保存在程序本身中。变量可以存储在堆栈、堆中,如果它足够小,甚至可以存储在寄存器中……根据用于其他变量的相同规则。