C 中的结构访问
Struct access in C
这个问题看似很愚蠢,但是struct中的成员访问操作是如何进行的呢?
当你写struct_name.member_name
时,机器如何知道要访问哪个成员?
结构存储在带有一些填充(取决于)的连续内存块中,并且没有成员标识符到内存位置的映射。
与数组不同,无法使用基地址偏移量和大小访问结构(我说得对吗?),那么它是如何发生的呢?
访问是否需要 O(1),原因是什么?
我不知道你为什么认为标识符和内存位置之间没有映射?访问 structs/classes 的成员只是:实例(结构)的地址 + 成员的偏移量。所以是的,访问任何成员都是常数时间 O(1)
编译器知道结构中每个成员相对于结构开头的位置。因此,给定 struct_name.member_name
,它将结构中 member_name
的偏移量添加到结构的基地址并访问该地址。
Does the access take O(1)
是的。
这个问题看似很愚蠢,但是struct中的成员访问操作是如何进行的呢?
当你写struct_name.member_name
时,机器如何知道要访问哪个成员?
结构存储在带有一些填充(取决于)的连续内存块中,并且没有成员标识符到内存位置的映射。
与数组不同,无法使用基地址偏移量和大小访问结构(我说得对吗?),那么它是如何发生的呢?
访问是否需要 O(1),原因是什么?
我不知道你为什么认为标识符和内存位置之间没有映射?访问 structs/classes 的成员只是:实例(结构)的地址 + 成员的偏移量。所以是的,访问任何成员都是常数时间 O(1)
编译器知道结构中每个成员相对于结构开头的位置。因此,给定 struct_name.member_name
,它将结构中 member_name
的偏移量添加到结构的基地址并访问该地址。
Does the access take O(1)
是的。