0

我有这个:

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 分配 1 个字节,为 < 16 和 >=8 分配 2 个字节,这样分配到 8 个字节(uint64_t)。

有可能这样做吗?我怎么能只使用我的变量数组来做到这一点?

4

1 回答 1

0

这可能应该是一条评论(或 3 条),但是……

您需要首先弄清楚您需要多少字节(以及为什么,尽管我假设您已经涵盖了那部分。)

什么是25?为什么要为 25 个大小为 8、16、32 ... 2^27 的不同数组分配内存?这可能是示例代码,但我们仍然被一个神奇的数字所迷惑:25。我们本可以使用常量(或预处理器宏)的名称。

8 是另一个神奇的数字,也是有问题的。sizeof(*array)不保证是8。

我也有点被你的想法弄糊涂了。您当前的代码为 a=7 分配 1024 个字节。单个字节如何足以存储您认为需要在原型中分配 1024 个字节的内容?

于 2012-04-11T01:04:08.857 回答