2012-06-02 34 views
0

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

+1

哪一个更重要:最小化的空间这占用量,或尽量减少它需要访问一个个体时间值? – robert

+0

如果切换标志将是一个瓶颈,我会感到惊讶。通常是标志对应的过程? – Mikhail

回答

3

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

你可能想看看this SO问题的位操作细节。

+0

+1:此解决方案可最大限度地减少内存使用量。由于OP没有具体说明“有效”意味着什么,所以这个技巧和Ouah的回答都是这个问题。 – wallyk

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; 
+1

+1:此解决方案可最大限度地缩短访问时间。尽管如此,不需要使用'malloc()。它可能是一个非堆变量,可能是局部函数或全局变量。 – wallyk

0

像?

struct bitf 
    { 

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

如果您不想使用位掩码,则最大尺寸是您计算机上变量的最大尺寸。 Error trying to define a 1,024-bit (128 Byte) Bit Field

或分钟存储器:

#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