• 1412阅读
  • 9回复

请问如何获取一个对象所占内存的大小? [复制链接]

上一主题 下一主题
离线clickto
 

只看楼主 倒序阅读 楼主  发表于: 2022-08-29
比如对QString之类的对象本身所占用的内存大小,sizeof只能取类型,不能获取对象实际所占用的内存。
离线ustone

只看该作者 1楼 发表于: 2022-08-30
对象里头有指针域动态分配内存存储实际字符串大小可变,对象本身是固定大小的,比如指针域按4个字节计算,加上其它字段。
离线ustone

只看该作者 2楼 发表于: 2022-08-30
如果你想知道字符串的长度QString类有个成员函数。
离线clickto

只看该作者 3楼 发表于: 2022-08-30
谢谢回复。我的使用场景是使用memcpy来复制对象,遇到string之类的可变长度内存处理就麻爪了
在线20091001753

只看该作者 4楼 发表于: 2022-08-30
当你把 QString 转换成 QByteArray 的时候,后者的 size 就是你想要的实际内存大小。

显然,后者大小与你所选的文字编码有关。

例如 QByteArray QString::toUtf8() 便是这段文字在 UTF8 编码下的内存占用。
(づ ̄ 3 ̄)づ
离线ustone

只看该作者 5楼 发表于: 2022-08-30
回 clickto 的帖子
clickto:谢谢回复。我的使用场景是使用memcpy来复制对象,遇到string之类的可变长度内存处理就麻爪了 (2022-08-30 08:29) 

对象隐含有函数指针,不适合memcpy来复制。纯粹的结构体可以。
离线ustone

只看该作者 6楼 发表于: 2022-08-30
回 ustone 的帖子
ustone:对象隐含有函数指针,不适合memcpy来复制。纯粹的结构体可以。 (2022-08-30 10:43) 

也只是浅复制,不适合有动态分配的指针域。
离线clickto

只看该作者 7楼 发表于: 2022-08-30
感谢解惑!!!
离线ustone

只看该作者 8楼 发表于: 2022-08-31
回 ustone 的帖子
ustone:对象隐含有函数指针,不适合memcpy来复制。纯粹的结构体可以。 (2022-08-30 10:43) 

应该说对象不适合用memset初始化,因为隐含的函数指针会被置无效值。要用构造函数初始化。
对象memcpy不清楚,不过只是浅复制。
离线fsu0413

只看该作者 9楼 发表于: 2022-09-02
memcpy只适用于pod,对于QString这种内置指针管理的类不能使用memcpy,会产生错误
快速回复
限100 字节
 
上一个 下一个