c - 有没有一个字节可以占位的C语言技巧?

标签 c

给定一个复杂的数据结构,其中每个子结构都有一个域为{true or false}的变量,

(例如)

struct dataBlock{
    struct {
        /* more members */
        char status;
    } node1;

    struct {
       /* more members */
       char status;
    } node2;
    /* More nodes */
};

1个字节只为1或0的值是一种浪费。有没有C语言的技术,每个节点中的状态只占一个字节中的一个位?我能想到的是使用 MACROS 但宏不能包含在本地范围内,对吧?所以拥有宏状态将意味着程序中只有一个宏状态。因此,调用 node1.status 和 node2.status 使用相同的宏。

最佳答案

您可以使用位域 - 这种语法允许您定义 strcut 中的每个 int 应占用多少位。 但是请注意,C 只能分配完整的字节,因此在任何情况下结构的大小都将四舍五入为最接近的 8 位乘法。

例如:

struct {
    int whole_int; /* a whole int, let's assume it's 16 bits. */
    int half_int : 8; /* only half an int */
    int another_half_int : 8;
} some_struct /* Total size is 2 bytes*/

话虽如此,我真诚地怀疑您是否会注意到使用此技术带来的任何性能提升,而且正如 Fredrick Gauss 评论的那样,这可能不值得麻烦。

关于c - 有没有一个字节可以占位的C语言技巧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20866784/

相关文章:

c - C 中奇怪的计算问题乘以 1.2 失败

c - 我们应该使用 __device__ 和 __host__ 的例子

c - 什么是 C 的高效工作流程? - 生成文件 + bash 脚本

c++ - 在 OpenCV 中将 RGB 转换为黑白

java - 在 Java 中使用 C 代码的快速步骤

c - 如何更改数组的 "geometry"?

c - 为 Blackberry 应用程序将 C 库移植到 Java

c - 如何避免 Ruby 扩展中的跨线程冲突?

c - 多个进程中的静态变量(信号)

c++ - O(N) 中的锦标赛获胜者和 O(NLogN) 中的玩家排名