2

malloc以下のように定義します。

void *malloc(size_t size);

http://pubs.opengroup.org/onlinepubs/009695399/functions/malloc.html


size_t定義 (stddef.h):

size_t: Unsigned integer type of the result of the sizeof operator. http://pubs.opengroup.org/onlinepubs/009604499/basedefs/stddef.h.html


ただし、このページによると、最大制限size_tは 65535 です。 (セクション 他の整数型の制限):

size_t の制限: SIZE_MAX 65535 http://pubs.opengroup.org/onlinepubs/007904975/basedefs/stdint.h.html


C標準を尊重したい場合、65535バイトを超える割り当てができないということですか?

4

3 に答える 3

7

SIZE_MAX少なくとも65535である必要があります。MS-DOSのようなものを実行している場合、実際にはそれがそれほど小さい可能性があります。典型的な、適度に最新のデスクトップコンピュータ(たとえば、10年未満のもの)では、それはより大きく、通常は少なくとも約40億(より正確には2 32 -1)になると予想できます。

より限定されたシステムに対処する必要があるかどうか(しようとするかどうか)は、コードの移植を気にする可能性のあるターゲットの範囲によって異なります。たとえば、アドレス指定可能なメモリが1メガバイト未満のシステムで16ビットコンパイラを処理する必要がある場合は、それを念頭に置いてコードを作成する必要があります。しかし、正直なところ、ほとんどの人にとって、それは単に無関係です。比較的小さなポータブルシステム(iPodなど)でさえ、それ以上のメモリをアドレス指定できます。OTOH、あなたが歌うグリーティングカードのコードを書いているなら、そうです、そのような制限はおそらく領土に付随します(しかし、そのような場合、標準はしばしば絶対法よりも一般的なガイドラインとして扱うものです)。

于 2012-04-11T15:56:41.650 に答える
3

の最小値SIZE_MAXは 65535 ですが、それ以上にすることもできます (通常はそうです)。

ほとんどの非組み込みプラットフォームでsize_tは、 はtypedefforunsigned longで、SIZE_MAXに設定されULONG_MAXます。

于 2012-04-11T15:53:39.510 に答える
1

32 ビット プラットフォームでは、SIZE_MAX は通常 2^32 - 1 であり、64 ビット プラットフォームでは 2^64 - 1 です。不明な場合は、printf で確認してください。

printf("sizeof size_t = %zx, SIZE_MAX = %zx\n", sizeof(size_t), SIZE_MAX);

SIZE_MAX の値を取得するには、stdint.h を含めます。

于 2012-04-11T16:04:40.850 に答える