Я думаю, что вы можете страдать из-за неправильного понимания: 2^32
- это , а не 2 32 (4G, если предположить, что ваши байты имеют длину восемь битов, что я буду для целейэтот ответ) в C.
^
- побитовый оператор XOR.Итак, что вы на самом деле выделяете:
binary hex decimal
--------- ---- -------
0010 0000 0x20 32
xor 0000 0010 0x02 2
=========
0010 0010 0x22 34
или 34 байта.Точно так же, 2^31
даст вам 29 байтов, поэтому то, что вы думаете, должно быть разницей в 2G (2 32 - 2 31 ) на самом деле всего 5 байтов.
Если вы хотите использовать полномочия в C, вы должны взглянуть на функцию pow()
, но я сомневаюсь, что вы сможете получить 4 ГБ памяти (возможно, на 64-битной ОС, но даже тогда, это очень много).
И еще одна вещь: sizeof(char)
- это всегда 1 - умножать на него не нужно.