• 締切済み

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

  • Javaのプログラムから、C言語のプログラムを呼び出す方法

    こんばんわ。 もうすぐ2008年もおしまいですね。 本日お聞きしたいのは、タイトルの通り、 Javaで書いたプログラムで、C言語のプログラムを呼び出し、 実行するプログラムはどのように書いたらよいかということです。 実際に行いたい内容は以下の通りです。 ・JavaからC言語で書かれたNN.exeを呼び出し、実行する。 です。 どのようなプログラムで呼び出すことができるのでしょうか。 あまりプログラムの知識がなく、説明に不備がありましたらすいません。 お力添え、宜しくお願いいたします。

  • C言語でpingを実行してその結果をもらうプログラム

    丸投げのようで大変恐縮なのですが、タイトルの通り のことをC言語プログラムで組みたいのですが、 どこかに(ネット上)サンプルプログラム等 はありませんでしょうか? いきなりのC言語開発案件で四苦八苦しております。

  • メモリ上にプログラムをロードして実行したい!!

    C言語とマイコンで遊んでる者です。 タイトルの通りSDカードやCF等の記録媒体からマイコンのRAM上にプログラムをロードして実行させたいのですが方法がよく解りません。 説明しにくいのですが、PCで言うところのBIOSみたいな物を予めマイコンに書き込んでおいて、そのプログラムが外部のストレージの中に有る実行ファイルのようになってるプログラムデータをメモリ上にコピーして、処理をそのプログラムのエントリーポイントに受け渡すようなOSモドキみたいな物を作りたいのです。 アセンブラならLDとかMOVとかでメモリにコピー出来るかもしれませんが、C言語ではどのようにしてコピーするのでしょう? 仮にメモリ上にコピー出来てもmain()関数が重複してしまい呼び出す方法が解りません。 こちらもアセンブラならばプログラムカウンタをロードした位置にしてやればいいのでしょうけれど。 C言語ではできないでしょうか? マイコンはAVRかSH2Aで考えています。 何方かご教授願います。

  • C言語のプログラムをJavaに

    C言語のプログラムをJavaのプログラムに直したいと思います。 で、どこから手を付ければよいでしょう? ヘッダファイルはどのように扱えばよいでしょうか? どうぞご教授お願いいたします

    • ベストアンサー
    • Java
  • C言語 メモリは何番地から何番地まであるのか

    C言語 メモリは何番地から何番地まであるのでしょうか? パソコンによって違うのでしょうか? C言語のプログラムではどうやって調べればよいでしょうか。

  • C言語のプログラム集

    こんにちは。C言語のテキストにはプログラムとその説明が書いていますが、 このC言語のプログラムが多くのっているような本はありますか?本屋さんで探したのですが、プログラムがものすごく多くのっているようなものがなかったので、もしお分かりの方がおられましたが、本の紹介をお願いします。

  • プログラム言語の覚え方

    こんばんは、お世話になります。 私は、いつもプログラム言語の例題を勉強するときは、 まずそのプログラムの仕組み、動作や意味などを理解して 覚えてようとするのですが、 それも一つなのですが、 やっぱりその例題自体を暗記して覚えたいのですが、 何か覚えるのにいい方法はないでしょうか? ご教示お願いします。

  • C言語でのプログラムの作り方

    はじめまして。C言語初心者の中学一年生です。 C言語でプログラムを作ろうと思ったのですが、やり方がわかりません。 ”hello”と表示するプログラムの作り方を教えてください。 使用しているコンパイラは"Visual C++ 2010"です。パソコンはWindows xpです。 中学生でも分かるように教えてください。 エディエタ、やソースプログラムなどの用語についても教えてくださると嬉しいです。

  • C言語のプログラム3問

    C言語です。この3問のプログラムを教えてください。お願いします。

  • プログラム言語はどうやって勉強すればよい?

    こんばんは。タイトルの通りですが、これからプログラム言語の勉強をしたいと思っています。 簡単に自己紹介すると私は20代で入社してから2~3年は電気回路のハードウェア設計をしていましたが、仕事の都合で他部署へ異動することになってしまいました。今度の部署ではソフトウェア設計をするそうです。具体的にはまだわかりません。 いきなりなので気持の整理がまだできていませんが、いつまでも悩んでいては仕方がないので気持ちを切り替えてプログラム言語の勉強をしようと思っています。 そこで、とりあえず本屋で何か買って勉強しようと思ったのですが、本屋に行くとプログラム言語の本何種類もあって訳がわかりません。CとかC++の違い、Visual BasicとかSQLとかJavaとかUnixとか…(他にも色々あるかもしれませんが)。 そこで本題に入りますが、 (1)仕事内容によっても異なることは分かっていますが、初心者がプログラム言語を勉強するとしたら、どのプログラム言語から始めたらよいでしょうか。 (2)C言語などのソフトは大手電気量販店などで購入できるのでしょうか。 (3)本などに付属されているCD-ROMだけではプログラム言語の勉強はできないのでしょうか((2)の質問に記載のようにソフトを購入しないとダメなのでしょうか)。 長文になってしまい、申し訳ありません。プログラム言語については全く知らないド素人なので、丁寧にご教授頂けると助かります。 よろしくお願いいたします。

専門家に質問してみよう