c - 智能类型定义

标签 c performance types typedef

我一直在嵌入式编程中使用 typedef 来避免常见错误:

int8_t - 8 位有符号整数
int16_t - 16 位有符号整数
int32_t - 32 位有符号整数
uint8_t - 8 位无符号整数
uint16_t - 16 位无符号整数
uint32_t - 32 位无符号整数

最近的 embedded muse(第 177 期,还没有在网站上)让我认识到拥有一些特定于性能的 typedef 是很有用的。 This standard建议使用 typedef 来指示您想要具有最小大小的最快类型。

例如,可以使用 int_fast16_t 声明一个变量,但它实际上会在 32 位处理器上实现为 int32_t,或 int64_t 在 64 位处理器上,因为这些将是这些平台上至少 16 位的最快类型。在 8 位处理器上,它将是 int16_t 位以满足最小大小要求。

从没见过这种用法,才想知道

  • 您是否在任何项目中看到过这种情况,无论是嵌入式项目还是其他项目?
  • 在 typedef 中避免这种优化的任何可能原因?

最佳答案

For instance, one might declare a variable using int_fast16_t, but it would actually be implemented as an int32_t on a 32 bit processor, or int64_t on a 64 bit processor as those would be the fastest types of at least 16 bits on those platforms

这就是 int 的用途,不是吗?您是否可能很快会遇到 8 位 CPU,而这还不够?

您能记住多少种独特的数据类型?

它是否提供了如此多的额外好处,以至于值得在我创建一个简单的整数变量时有效地将要考虑的类型数量加倍?

我什至很难想象它可能被持续使用的可能性。

有人要编写一个返回 int16fast_t 的函数,然后其他人会出现并将该变量存储到 int16_t 中。

这意味着在模糊的情况下,快速 变体实际上是有益的,它可能会改变您的代码的行为。它甚至可能导致编译器错误或警告。

关于c - 智能类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/697618/

相关文章:

c++ - 分配更多内存会减慢操作速度?

wpf - Application.Run 是我的应用程序中 CPU 消耗最高的函数;我可以优化什么?

objective-c - CLI 和 GUI 之间的 NSInteger 区别?

c - 使用 PIC32 的定时器 2 设置延迟

C - valgrind - 大小为 1 的无效读取

linux - 如何在 debian 系统上调试(慢速)链接器

javascript - 如何检查 Javascript 数组中是否存在属性值?

types - 在 Julia 中为多种类型的输入定义一个函数

c - 分发用 C 编写的库

c - 如何在openCV的全屏无边框窗口中显示图像