保留空间C

保留空间C,c,C,你能告诉我用C语言从内存中保留1000位的最佳方法吗? 我正在做一个程序,我需要管理标志(值=0或=1)。最有效的方法是什么? 我在考虑保留所需的空间,并使用掩码控制标志(位)。 谢谢在C语言中,您可以访问/寻址的最小内存量是一个字节,它具有CHAR\u BIT位宽(保证至少8位长)。因此,如果您正在寻找压缩结构,可以使用ceil(1000/8)bytes 您可能需要查看SO问题以了解位操作的详细信息。在C中,您可以访问/寻址的最小内存量是一个字节,该字节具有字符位宽度(保证至少8位长)。因此,

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

在C语言中,您可以访问/寻址的最小内存量是一个字节,它具有
CHAR\u BIT
位宽(保证至少8位长)。因此,如果您正在寻找压缩结构,可以使用
ceil(1000/8)
bytes


您可能需要查看SO问题以了解位操作的详细信息。

在C中,您可以访问/寻址的最小内存量是一个字节,该字节具有
字符位宽度(保证至少8位长)。因此,如果您正在寻找压缩结构,可以使用
ceil(1000/8)
bytes


您可能需要查看SO问题以了解位操作的详细信息。

您可以使用
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;
#包含//for bool
#包括//用于malloc
#定义N 1000
bool*b=malloc(N*sizeof*b);
//例如,将第42个元素设置为1
b[41]=1;

您可以使用
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;
#包含//for bool
#包括//用于malloc
#定义N 1000
bool*b=malloc(N*sizeof*b);
//例如,将第42个元素设置为1
b[41]=1;
类似于

struct bitf
  {

    unsigned char b:1;
  };
struct bitf[1000];
如果不想使用位掩码,则“最大大小”是计算机上变量的最大大小。

或对于最小内存:

#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;
}
什么样的

struct bitf
  {

    unsigned char b:1;
  };
struct bitf[1000];
如果不想使用位掩码,则“最大大小”是计算机上变量的最大大小。

或对于最小内存:

#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;
}

哪一个更重要:最小化它占用的空间量,还是最小化访问单个值所需的时间?如果切换标志会成为瓶颈,我会感到惊讶。通常是标志对应的过程?哪一个更重要:最小化占用的空间量,还是最小化访问单个值所需的时间?如果切换标志会成为瓶颈,我会感到惊讶。通常是标志对应于?+1的过程:此解决方案将访问时间降至最低。但是不需要使用
malloc()
。它可以是一个非堆变量,可以是函数的局部变量,也可以是全局变量。+1:这个解决方案可以最大限度地减少访问时间。但是不需要使用
malloc()
。它可以是非堆变量,可以是函数的局部变量,也可以是全局变量。+1:此解决方案可最大限度地减少内存使用。因为OP没有明确“高效”的含义,所以这项技术和Ouah的方法都回答了这个问题。由于OP没有具体说明“高效”的含义,所以这项技术和Ouah的答案都是正确的。