gpt4 book ai didi

c++ - 如何为性能设计对象

转载 作者:IT老高 更新时间:2023-10-28 22:59:59 26 4
gpt4 key购买 nike

在阅读 book 时最近关于物理引擎开发,我遇到了一个我以前从未考虑过的设计决策。这与 CPU 寻址内存中的原始字节的方式有关。

考虑以下类:

class Foo
{
public:
float x;
float y;
float z;

/* Constructors and Methods */

private:
float padding;
}

作者声称填充,在 x86 架构中将对象的大小增加到四字,对性能有明显的好处。这是因为 4 个单词在内存中比 3 个单词更干净,这是什么意思?用冗余数据填充对象以提高性能对我来说似乎很矛盾。

这也引出了另一个问题,1 或 2 个单词大小的对象呢?如果我的课是这样的:

class Bar
{
public:
float x;
float y;

/* Constructors and Methods */

private:
/* padding ?? */
}

我应该为这个类添加填充,以便它在内存中更干净吗?

最佳答案

编译器有责任决定什么是合理的填充(假设是典型的访问模式)。编译器确实比你更了解你的机器。此外,您的机器将与您同在几年;该程序将持续数十年,在广泛的平台上运行,受制于令人难以置信的各种使用模式。对于今天的 i7 来说最好的是很可能对于明天的 i8 或 ARMv11 来说是最差的。

为了追求难以捉摸的“性能”而混淆代码完全属于 premature optimization .永远记住,你的时间(编写、测试、调试、一周后再次理解,在经过调整的代码上)比可能浪费的计算机时间要昂贵得多(除非所说的代码每天在数百万台机器上运行数千次) , 那是)。除非您有确凿的事实表明性能不够,并且测量告诉您改组该结构是一个值得担心的瓶颈,否则代码调整完全没有意义。

关于c++ - 如何为性能设计对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22249552/

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