0

你能告诉我在 C 中从内存中保留例如 1000 位的最佳方法吗?我正在做一个程序,我需要管理标志(值 = 0 或 = 1)。最有效的方法是什么?我正在考虑保留所需的空间并使用掩码控制标志(位)。谢谢

4

3 回答 3

3

您可以在 C 中访问/寻址的最少内存量是位宽的字节CHAR_BIT(保证至少 8 位长)。所以,如果你正在寻找一个打包的结构,你可以使用ceil(1000/8)字节。

您可能想查看这个SO question 以了解位操作的详细信息。

于 2012-06-02T19:47:21.930 回答
2

您可以使用以下bool类型:

#include <stdbool.h> // for bool
#include <stdlib.h>  // for malloc

#define N  1000

bool *b = malloc(N * sizeof *b);

// for example to set the 42th element to 1
b[41] = 1;
于 2012-06-02T19:54:50.440 回答
0

就像是?

struct bitf
  {

    unsigned char b:1;
  };
struct bitf[1000];

如果您不使用位掩码,则最大大小是计算机上变量的最大大小。 尝试定义 1,024 位(128 字节)位字段时出错

或最小内存:

#include <stdio.h>

int main(void)
{

  struct bitf
  {

    unsigned char a:1;
    unsigned char b:1;
    unsigned char c:1;
    unsigned char d:1;
    unsigned char e:1;
    unsigned char f:1;
    unsigned char g:1;
    unsigned char h:1;

  };

  struct bitf number[125];

  number[100].a = 1;
  number[110].h =1;
  printf("size: %d  a:%d   h:%d\n",sizeof(number), number[100].a ==0, number[110].h ==1);


  return 0;
}

输出:

size: 125  a:0   h:1
于 2012-06-02T22:57:22.297 回答