c – 选择整数类型大小有哪些好的指导原则?

我一直在寻找,我还没有真正想出答案.

当我在内存有限的嵌入式设备上编程时,我通常习惯使用最小的积分/浮点类型来完成这项工作,例如,如果我知道计数器总是在0到255之间,我将它声明为uint8_t.

但是,在内存受限较少的环境中,我习惯只使用int来处理所有内容,按照Google C++ Styleguide.当我查看现有代码时,通常会以这种方式完成.

要明确的是,我得到了这样做的理由,(Google非常好地解释了这一点),但我并不清楚第一种方式背后的理由.

在我看来,即使在不关心内存使用的系统上,减少程序的内存占用也会对整体速度有利,因为从逻辑上讲,较少的整体数据意味着它可以更多地适应CPU缓存.

然而,使问题复杂化的是编译器将自动填充数据并将其与边界对齐,以便可以在单个总线周期中获取数据.我想,那么,它归结为编译器是否足够聪明,比如两个32位整数,并将它们组合在一个64位块中,而不是单独填充每一个到64位.

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

所以我想我的问题是为什么Google方法在实际代码中似乎更为普遍.这里有隐藏的成本,我错过了吗?

最佳答案
通常使用“谷歌方法”的常见原因是因为int通常足够好,并且它通常是初学者材料中教授的第一个选项.为“有限的记忆”优化非平凡的代码也需要更多的努力(工时等) – 如果不是实际需要则没有意义.

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

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

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

为你所谓的“有限内存”编写的许多代码实际上并不需要.有一点,程序员了解更多,大量开始沉迷于过早优化 – 担心性能或内存使用,即使没有证明他们需要这样做.虽然由于真正的需要,肯定会为“有限的内存”编写大量代码,但由于过早的优化,会编写更多这样的代码.

相关文章

文章浏览阅读315次。之前用C语言编过链表,这几天突然想用C+...
文章浏览阅读219次。碰到问题就要记录下来,防止遗忘吧。文章...
文章浏览阅读1.8k次,点赞11次,收藏37次。因为自己对决策树...
文章浏览阅读492次。C++ 设计模式之策略模式
文章浏览阅读683次。我也算是个C++的小白,对于C++中的谓语我...
文章浏览阅读225次。又看了一遍操作符的东西,感觉之前对操作...