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