当前位置: 首页 > 知识库问答 >
问题:

内存中成员变量的连续布局?

邹昊
2023-03-14

C++在内存中以与在源中相同的顺序存储变量,这是一个通用规则吗?那么,如果我以32位顺序连续定义了许多4字节成员变量,并且具有不同的隐私,32位体系结构编译器将它们放到内存中的连续字中?

共有2个答案

麻和雅
2023-03-14

如果您定义了struct/class或array,您所请求的内存将是连续的。如果您从成员变量的想法是class/struct属性,所以我可以说是,它将被包装存储在内存中(如此连续)。每次构造一个对象时,该对象的所有属性都将按照相对类/结构定义的顺序进行包装。

滑弘扬
2023-03-14

C++在内存中以与在源中相同的顺序存储变量,这是一个通用规则吗?

不。这样的规则在C++中对于变量一般不存在。

但是,具有相同访问控制的成员变量按声明的相同顺序存储,是的。未指定具有不同访问控制的成员之间的顺序。

内存中成员变量的连续布局?

不能保证成员在连续内存中。在成员之间可能存在未使用的填充字节,这可能是例如满足成员的对齐要求所需要的。

如果我们添加相同访问控制的附加限制,并且成员具有相同的对齐方式,那么实际上它们很可能在连续内存中,尽管语言不能保证这一点。

 类似资料:
  • 考虑到 > 假设x、y和z位于连续的内存位置安全吗? 假设for 和< code>T = double至少是安全的吗? 如果没有,是否有可能以跨平台的方式执行? 注意:我不介意在z后面填充,只要x,y,z是相邻的

  •   - a - addr : rt_i2c_bus_device , rt_i2c_msg ai_addr : addrinfo ai_addrlen : addrinfo ai_canonname : addrinfo ai_family : addrinfo ai_flags : addrinfo ai_next : addrinfo ai_protocol : addrinfo ai_soc

  • 这里列出了所有文档化的结构体和联合体的成员变量,并附带结构或联合所属的文件: - a - addr : rt_i2c_bus_device , rt_i2c_msg ai_addr : addrinfo ai_addrlen : addrinfo ai_canonname : addrinfo ai_family : addrinfo ai_flags : addrinfo ai_next : a

  • Solidity预留了3个32字节大小的槽位: 0-64:哈希方法的暂存空间(scratch space) 64-96:当前已分配内存大小(也称空闲内存指针(free memory pointer)) 暂存空间可在语句之间使用(如在内联编译时使用) Solidity总是在空闲内存指针所在位置创建一个新对象,且对应的内存永远不会被释放(也许未来会改变这种做法)。 有一些在Solidity中的操作需要

  •   - y - y : rt_device_rect_info

  •   - x - x : rt_device_rect_info xfer : rt_spi_ops

  •   - w - waiting_list : rt_wqueue wakeup : rt_wqueue_node width : rt_device_graphic_info , rt_device_rect_info wktime : rt_alarm , rt_alarm_setup work_current : rt_workqueue work_data : rt_work work_fu

  •   - v - value : rt_mutex , rt_semaphore vstart_addr : rt_dlmodule