本帖最后由 hcwanz 于 2023-11-4 14:36 编辑 Xelloss0618 发表于 2023-11-4 00:30 这是因为对字节对齐进行的设置导致的。因为火山只在定义结构体时定义了这个参数,如果在类定义时一同定义就不会不同了 |
hcwanz 发表于 2023-11-3 22:33 只能说大部分结构体和 C++ 类的默认内存布局差不多,但不能完全保证一样。 比如下面的例子,把对齐字节改动一下,就马上不一样了。 |
本帖最后由 hcwanz 于 2023-11-3 23:07 编辑 所以理论上普通的结构体确实可以直接取首成员地址,当作结构体地址。不过嵌套还是不行。 |
Xelloss0618 发表于 2023-11-3 22:02 好像c++的类会和结构体一样字节对齐。 |
你要先了解火山的结构类是什么: 1、结构类首先它本身是一个基于火山对象类的 C++ 类,而不是结构体。 2、它内部定义了一个真的结构体类型,名称为 结构类::S。 3、结构类并没有 S 结构体类型的成员变量,那就是它默认是不会将结构体实例化的。 综上: 1、你不可能直接取结构类之中的结构体指针,因为它只是个类型,必须将「结构类::S」实例化,才能取它的指针。 2、实例化之后,还要调用结构类内部的 SetStruct、GetStruct 方法来将结构类和结构体的数据互相复制。 3、取结构类首成员的地址,一定程度可以跟结构体地址差不多。 4、如果是一些内存对齐比较特别的结构体,结构类跟结构体的内存布局会不一样,这种就不能将结构类首成员地址当结构体地址使用。 |
怎么感觉是在把整个结构复制到指定内存?我想要一个像取变量地址()一样高效的.取结构体指针() |
封了 |
|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )
GMT+8, 2024-11-24 06:06 , Processed in 0.092462 second(s), 23 queries .
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.