gpt4 book ai didi

c++ - 为什么这个c++结构有96字节的内存?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:01 24 4
gpt4 key购买 nike

我不明白为什么这个结构占用 96 字节的内存。

struct cell
{
bool filled;
bool isParent;
short int mat;
bool cx,cy,cz;
vect norm;
struct cell* child[8];
struct cell* parent;
cell(float pxx=0, float pyy=0, float pzz=0, float ss=0, cell *par=NULL, bool cxx=0, bool cyy=0, bool czz=0);

void open_read(string);
};

我知道单词对齐,但我认为这至少不应超过 64 个字节...这个结构将有数百万个实例,所以我怎样才能将内存占用降到最低?我正在使用 linux,vect 是一个 vector (3 个 float )

最佳答案

对于指针,您无能为力。

但是,您可以使用单位枚举器或位域将所有 bool 值压缩为一个字节。根据 mat 的最大值,您可以将标志和该值压缩为两个字节。这不是一个很大的节省。

如果您希望您的树非常密集,则可以通过将您的 child 分配为池来获得显着 yield 。也就是说,您有一个单独的 struct cell* child 指针,它引用一个内存块,该内存块是所有八个子元素的数组。然后你可以节省每条记录 7 个指针的空间,因为每个非叶节点都会分配比它需要的更多的内存。您可能需要一个标志来指示该节点为空。

或者,如果您想牺牲数组的随机访问性,您可以将您的 child 链接成一个列表。那么您只需要一个child 指针和一个sibling 指针。每个节点节省 6 个指针,并且不会因池化而造成浪费。不过它有点挑剔。

关于c++ - 为什么这个c++结构有96字节的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14697738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com