>我有这个:
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。我的想法是只为 8 <分配 _x0031_="><16>=8 分配 2 个字节,这样分配 8 个字节 (uint64_t)。分配>
可以做到吗?如何仅使用我的变量数组来做到这一点?
这可能应该是一个评论(或 3),但是...
您需要首先弄清楚您需要多少字节(以及需要什么,尽管我假设您已经涵盖了该部分。
什么是25?为什么要为 25 个大小为 8、16、32 的不同数组分配内存......2^27?这可能是示例代码,但我们仍然被一个神奇的数字所抛弃:25。我们可以使用常量(或预处理器宏)的名称。
8是另一个神奇的数字,也是有问题的。 sizeof(*array)
不能保证为 8。
我也对你的想法有点困惑。当前代码为 a=7 分配 1024 个字节。单个字节如何足以存储您认为需要在原型中分配 1024 字节的任何内容?