gpt4 book ai didi

c++ - 类中的内存使用 - 将 double 转换为 float 并没有像预期的那样减少内存使用

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:37 25 4
gpt4 key购买 nike

我正在初始化以下类型的数百万个类

template<class T>
struct node
{
//some functions
private:
T m_data_1;
T m_data_2;
T m_data_3;

node* m_parent_1;
node* m_parent_2;
node* m_child;
}

模板的目的是使用户能够选择floatdouble精度,想法是 node<float>将占用更少的内存 (RAM)。

但是,当我从 double 切换时至 float我的程序的内存占用并没有像我预期的那样减少。我有两个问题,

  1. 编译器/操作系统是否可能为我的 float 保留了比所需空间更多的空间(或者甚至将它们存储为 double )。如果是这样,我该如何阻止这种情况发生 - 我在带有 g++ 的 64 位机器上使用 linux。

  2. 有没有一种工具可以让我确定所有不同类使用的内存量? (即某种内存分析)- 以确保内存不会在我没有想到的其他地方被 goobled。

最佳答案

如果您正在为 64 位编译,那么每个指针的大小都是 64 位。这也意味着它们可能需要与 64 位对齐。所以如果你存储 3 个 float ,它可能必须插入 4 个字节的填充。所以不是保存 12 个字节,而是只保存 8 个字节。无论指针是在结构的开头还是结尾,填充仍然存在。这是必要的,以便将连续的结构放入数组中以继续保持对齐。

此外,您的结构主要由 3 个指针组成。您节省的 8 个字节将您从一个 48 字节的对象变成了一个 40 字节的对象。这并不是一个巨大的下降。同样,如果您正在为 64 位编译。

如果您正在为 32 位编译,那么您将从 36 字节结构中节省 12 个字节,这在百分比方面更好。如果必须将 double 对齐到 8 个字节,则可能更多。

关于c++ - 类中的内存使用 - 将 double 转换为 float 并没有像预期的那样减少内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6893414/

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