- ベストアンサー
64bitでメモリアロケートエラーは起きますか
メモリを動的に割り当てた際、メモリ割り当てに失敗するとメモリアロケートエラーが発生しますが、 64bit環境でもこれは発生しますか。 理論上は発生するとして、現実的なレベルで発生することはありますか。 発生する場合はどのようなときに発生しますか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>メモリアロケートエラーが発生する、具体的な例を挙げていただけませんか。 $ uname -a Linux fedora64 3.14.4-200.fc20.x86_64 #1 SMP Tue May 13 13:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux $ cat memalloc.c #include <errno.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char **argv) { void *p = malloc(32L*1024*1024*1024); printf("%s\n", strerror(errno)); printf("%p\n", p); return 0; } $ cc -o memalloc memalloc.c $ ./memalloc Cannot allocate memory (nil) $ ちなみにFreeBSD 10だと同プログラムでも確保できたような結果にはなります(実際にアクセスする際にエラーになるんだろうけど)。 % uname -a FreeBSD * 10.0-STABLE FreeBSD 10.0-STABLE #1: Sun Apr 27 14:03:05 JST 2014 * amd64 % ./memalloc No such file or directory 0x801000000 % アドレス空間が64ビットあったところで物理メモリ+スワップを超える量をどうやって確保します?(「物理メモリ+スワップ」というのは例えです。この辺はシステムによって異なります)
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
たぶん, 1 PB くらい確保しようとしたら失敗するんじゃないかな. いろんな事情で成功したように見えるかもしれんけど.
お礼
回答ありがとうございます。 いろんな事情というのは、、、たとえばどんなことでしょうか。
- wormhole
- ベストアンサー率28% (1626/5665)
>64bit環境でもこれは発生しますか。 発生します。 >理論上は発生するとして、現実的なレベルで発生することはありますか。 あります。 >発生する場合はどのようなときに発生しますか。 ふつうにメモリが足りないときです。 64bit環境だからといって無制限にメモリを使えるわけじゃありませんし。
お礼
回答ありがとうございます。 メモリアロケートエラーが発生する、具体的な例を挙げていただけませんか。
お礼
ソースコードを付けた回答ありがとうございます。 これを参考にさらに調べてみようと思います。