gpt4 book ai didi

c++ - 选择整数类型的大小有哪些好的准则?

转载 作者:IT王子 更新时间:2023-10-29 00:54:35 27 4
gpt4 key购买 nike

我一直在四处寻找,但我还没有真正找到答案。

当我在内存有限的嵌入式设备上编程时,我通常习惯于使用最小的整数/浮点类型来完成这项工作,例如,如果我知道计数器总是介于零和 255,我将其声明为 uint8_t

然而,在内存受限较少的环境中,我习惯于对所有内容使用 int,根据 Google C++ Styleguide .当我查看现有代码时,通常倾向于以这种方式完成。

需要说明的是,我明白这样做背后的基本原理(Google 解释得很好),但我并不清楚以第一种方式做事背后的基本原理。

在我看来,减少程序的内存占用量,即使在您不关心内存使用情况的系统上,也会对整体速度有好处,因为从逻辑上讲,更少的整体数据意味着更多的数据可能适合 CPU 缓存。

然而,使事情复杂化的是,编译器会自动填充数据并将其与边界对齐,以便可以在单个总线周期中获取数据。我想,这归结为编译器是否足够聪明,可以将两个 32 位整数放在一个 64 位 block 中,而不是将每个整数单独填充到 64 位。

我想 CPU 本身是否可以利用这一点也取决于它的确切内部结构,但是优化内存大小可以提高性能的想法,特别是在较新的处理器上,Linux 内核 relied for awhile 的事实证明了这一点。在 gcc 的 -0s 选项上提升整体性能。

所以我想我的问题是为什么 Google 方法在实际代码中似乎更为普遍。这里是否有我遗漏的隐藏费用?

最佳答案

通常使用“google 方法”的通常原因是 int 通常足够好,而且它通常是初学者 Material 中教授的第一个选项。它还需要更多的努力(工时等)来优化“有限内存”的重要代码 - 如果实际上不需要,那么这些努力是毫无意义的。

如果“实际代码”是为了可移植性而编写的,那么 int 是一个很好的默认选择。

无论是否为可移植性而编写,许多程序只在具有足够内存资源和可以表示所需值范围的 int 类型的主机上运行。这意味着无需担心内存使用(例如,根据变量需要支持的特定值范围优化变量的大小)并且程序可以正常运行。

为“有限内存”编程当然很常见,但通常不是编写大多数代码的原因。相当多的现代嵌入式系统拥有足够的内存和其他资源,因此它们并不总是需要这些技术。

为所谓的“有限内存”编写的大量代码实际上也不需要。有一点,随着程序员了解更多,相当多的人开始沉迷于过早的优化——担心性能或内存使用,即使没有证明他们需要这样做。虽然确实有大量代码是出于真正的需要而为“有限内存”编写的,但由于过早优化而编写的此类代码要多得多。

关于c++ - 选择整数类型的大小有哪些好的准则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38938391/

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