C 中的结构访问

Struct access in C

这个问题看似很愚蠢,但是struct中的成员访问操作是如何进行的呢?

当你写struct_name.member_name时,机器如何知道要访问哪个成员? 结构存储在带有一些填充(取决于)的连续内存块中,并且没有成员标识符到内存位置的映射。 与数组不同,无法使用基地址偏移量和大小访问结构(我说得对吗?),那么它是如何发生的呢? 访问是否需要 O(1),原因是什么?

我不知道你为什么认为标识符和内存位置之间没有映射?访问 structs/classes 的成员只是:实例(结构)的地址 + 成员的偏移量。所以是的,访问任何成员都是常数时间 O(1)

你可以看到https://en.cppreference.com/w/c/types/offsetof :)

编译器知道结构中每个成员相对于结构开头的位置。因此,给定 struct_name.member_name,它将结构中 member_name 的偏移量添加到结构的基地址并访问该地址。

Does the access take O(1)

是的。