c - 选择小于架构大小的变量是一个有效的选择吗?

标签 c

我需要一些建议。

情况:

  • 我正在 32 位架构上开发 ANSI C 应用程序。
  • 我的业务逻辑的大多数变量在设计上都适合 uint8_t。
  • 大多数变量必须作为 uint8_t 数据段在消息中发送
  • 我不使用结构包装

问题:

  • 如果我使用 size_t 并向下转换外部接口(interface)序列化中的所有变量,我的应用程序是否会在可移植性方面获益?
  • 在序列化部分旁边使用 uint8_t 或 size_t+casting 是否有性能影响?
  • 是否有关于为小于架构大小的变量选择变量大小的最佳实践?

亲切的问候

最佳答案

无论您做什么,size_t 都不是存储适合 8 位的数据的糟糕选择。有些平台的 size_t 大于机器的自然字长

在一般情况下,我建议使用 (unsigned)int。虽然这不能保证,但大多数情况下您会通过这种方式获得最佳性能。例如,在 8 位 µc 上它可能是一个糟糕的选择,因为 int 必须至少有 16 位。但在一般情况下,这是一个不错的选择。

如果您担心内存消耗(例如,您有大量数据,但所有单个值都适合 uint8_t),那么您应该使用 uint8_t 代替。

当然不可能在这里给出确定的答案。如果您决定使用 unsigned int,但必须经常进行(反)序列化,这可能比在整个程序中仅使用 uint8_t 花费更多。如果有疑问,请尝试这两种实现(使用 typedef 和条件编译)和测量性能。

关于c - 选择小于架构大小的变量是一个有效的选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45190910/

相关文章:

c - fgets() 在 C 中无法正常工作

c - 在 redis (hiredis) 中使用 SET 将 C 结构存储为二进制

c - 声明 C 函数只接受常量

c - 按下键后立即退出包含时间延迟的循环

c - 高效内存重新分配问题

c - 如何在 C 中使用 getopt 打印帮助文本?

c - 结构体数组的结构体

c - 阅读 CGI 帖子表格

c++ - libcurl 在 SSH 公私钥认证上的实现

c - C 中的不完整类型