• 締切済み

C言語で200MBメモリをとるプログラムを書くには、どう書けばいいですか?

タイトルのとおりなのですが、C言語で200MBメモリをとるプログラムを書くには、どう書けばいいですか? 一般的な例題として出題されています。 ご教授よろしくおねがいします。

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

一応補足しておくと... 「一般的」ということであれば、普遍的に当てはまる必要があります(つまり、特定の処理系にしか当てはまらないような「特殊」なケースではない)ので、int型の表現範囲は-32767~+32767と考えるべきですし、size_t型の表現範囲は0~65535と考えるべきです。フリースタンディング環境のことも考えると、mallocやcallocは使えません。また、翻訳限界のことも考慮しなければなりません。 だとすると、取りうる方法は自ずと限られてきます。

HECTERHOOD
質問者

お礼

丁寧にありがとうございます。 お恥ずかしい話ですが、C言語の入門者につき、なにがなんだかまだ理解ができていない状態です。 概念的な事を理解してから、頂いたお言葉をもう一度確認いたします。 どうもありがとうございました。

回答No.4

こんにちは。 >C言語で200MBメモリをとるプログラムを書くには このサイズを1回で確保するのは、#3の方の方法になります。 しかし、指定するサイズにも#1の方のように上限が発生します。 メモリの確保の方法としては、目的にあわせた確保方法があり ますので、「200MBメモリ確保!!」とすると、いくつかの方法 があると思います。 (#2の方の方法やツリー構造、スタック構造等…合計すれば確保できます) >一般的な例題として出題されています。 「一般的な例題」という文言からだと回答するにも難しいですが、 単に「C言語で200MBメモリをとるプログラム」だけであれば、 #include <stdio.h> int main( void ); int main( void ) { char * p; int s; s = 200 * 1024 * 1024; p = (char *)malloc( s ); if( p == NULL ){ printf( "err \n" ); }else{ printf( "ok! %p %d \n", p, s ); free( p ); } return(0); } で完了かと。

HECTERHOOD
質問者

お礼

丁寧にありがとうございます。 お恥ずかしい話ですが、C言語の入門者につき、なにがなんだかまだ理解ができていない状態です。 概念的な事を理解してから、頂いたお言葉をもう一度確認いたします。 どうもありがとうございました。

  • eroermine
  • ベストアンサー率18% (83/444)
回答No.3

char *allocated = malloc(SIZE200MB); if ( allocated == NULL ){ // ここで失敗した場合を考える。 // たかが200MB取れないのはおかしいけど、他のプロセスが使ってるのかもしれないので 待ってみるとか、 使用者に聞いてみるとか。 対策はいろいろ

HECTERHOOD
質問者

お礼

丁寧にありがとうございます。 お恥ずかしい話ですが、C言語の入門者につき、なにがなんだかまだ理解ができていない状態です。 概念的な事を理解してから、頂いたお言葉をもう一度確認いたします。 どうもありがとうございました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

実メモリが200Mバイト確保できる場合の話ですが... > 一般的な例題として出題されています。 C99では、ひとつのオブジェクトのバイト数として規格で保証されるのは65535バイトまでです。また、ひとつの翻訳単位には、4095個までの外部結合を持つ識別子を定義することができますので、 char a[65535]; char b[65535]; ... のように、200Mバイトになるまで並べていけばよいでしょう。

  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

「C言語」ならメモリ確保の関数は malloc() だけど、malloc()で確保できるのはsize_tで指定できる範囲だから、環境によってはとれないんじゃないかな?

HECTERHOOD
質問者

お礼

了解しました。出題者はarainさんの仰ったような理解を求めているのだとおもいます。malloc() とsize_tについて勉強してから再度考えてみます。ありがとうございました。

関連するQ&A