我需要一些建议。
情况:
- 我正在 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/