我有这个:
uint64_t **array;
int a;
if((array = malloc(8 * 25)) == NULL){
errx(1, "malloc");
}
for(a = 0; a < 25; a++){
if((array[a] = malloc(8 * (1 << a))) == NULL){
errx(1, "malloc 1");
}
}
在最糟糕的情况下,我将使用2 ^ a位,这意味着,我并不总是需要使用uint64_t,甚至uint。我的想法是为&lt; 1分配一个字节。 8,2字节用于&lt; 16和a> = 8,这种方式为8字节(uint64_t)。
有可能吗?我怎么能只用我的变量数组呢?
答案 0 :(得分:0)
这可能应该是评论(或3),但是......
你需要首先弄清楚你需要多少字节(以及为什么,但我认为你已经覆盖了那部分。)
什么是25?为什么要为25个不同的大小为8,16,32 ... 2 ^ 27的数组分配内存?这可能是示例代码,但我们仍然被一个神奇的数字抛弃:25。我们可以使用常量的名称(或预处理器宏)。
8是另一个神奇的数字,也是有问题的。 sizeof(*array)
不保证为8。
我对你的想法也有点困惑。您当前的代码为a = 7分配1024个字节。单个字节如何足以存储您认为需要在原型中分配1024个字节的内容?