ベストアンサー C言語 メモリは何番地から何番地まであるのか 2018/02/20 23:24 C言語 メモリは何番地から何番地まであるのでしょうか? パソコンによって違うのでしょうか? C言語のプログラムではどうやって調べればよいでしょうか。 みんなの回答 (4) 専門家の回答 質問者が選んだベストアンサー ベストアンサー mitoneko ベストアンサー率58% (469/798) 2018/02/22 21:34 回答No.4 それをプログラムから調べる方法は、ありません。 メモリーの大きさ、番地の表現方法、番地を表す数字の大きさ(アドレス幅)等々は、全部、CPUによって変わります。 アドレス幅が8ビットで、1~256番地なんて、時代もありましたし、今や、物理メモリーはOSに支配されているので、プログラムから、物理メモリーアドレスに触れることすら不可能です。 ちなみに、mallocや配列で最大どれだけのメモリーが確保できるかは、OSかコンパイラーの処理系のマニュアルに記載があり、それを超える要求をしたら、mallocかコンパイラーがエラーを返しますから、それは判定することが出来ます。 いまでも、マイコン(いわゆる組み込み用のチップですね)では、物理メモリーアドレスそのものを意識して、プログラムすることは多々ありますが、その場合は、CPUのマニュアルを首っ引きで、アドレスをマニュアルから調べながらプログラムします。つまり、この場合でも、Cのプログラムから調べることはありません。 基本的なスタンスとしては、ポインターの中に何が入っているかは一切気にしない。メモリーを割り当てる時は、スタテックに宣言するか、malloc等で取得する。といったアプローチになります。そして、いずれも、宣言した・取得した時に要求した大きさ以上のものは使わないように自分で管理するものです。 ただし、一つだけお約束があります。ポインターは、連続した整数で構成されている様に見える、つまり、ポインターに対して、整数を加減算することは、自然に評価されるということだけは保証されています。 保証されていることは、それだけです。 実際、ポインターをintなりlongなりに変換して、中身を覗けば、それがメモリリーアドレスかというと・・・今時のパソコンのOSなら、ほぼ間違いです。ただ、そのプログラムがOSとメモリー番地に関してやりとりするためだけにある論理的なアドレスである可能性の方が高いです。ポインターの実装によっては、理論上、intやlongに変換できない可能性すらあります。(例えば、ブロック番号とオフセットで構成されている等等) 質問者 お礼 2018/02/22 23:54 回答有難うございます。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 1 その他の回答 (3) titokani ベストアンサー率19% (341/1726) 2018/02/22 11:52 回答No.3 「メモリ」が何番地から何番地まであるのか、となると難しいですね。 「アドレス」が何番地から何番地ということですと、CPUのアドレス幅で決まります。 昔の8ビットパソコンなんかだと、アドレスが16ビットなので、 0~FFFF までのアドレスがあることになります。 しかし、メモリがどこからどこまであるのかはまた別です。 ROMとかRAMとかVRAMとかもありますしね。 バンク切り替えなんてのがあると、もっとややこしいです。 メモリマップトIOとか・・・。 まあ、このあたりはC言語の仕様ではなくて、パソコンの機種ごとに違った話です。 C言語から調べる方法もありません。 これが現代の64ビットパソコンになりますと、アドレスが64ビットですから、 0~FFFFFFFFFFFFFFFF までのアドレスがあります。 で、これが全部メモリで埋まっているかというと、そうともいえるし、そうでないともいえる、という状態です。「仮想記憶」という仕組みなのですが。 いずれにせよ、OS上でプログラムを動かす場合には、何番地から何番地ということは意識せずとも良いようになっていますし、調べる方法も用意されていません。 組み込み系の場合は、意識することもありますが、その場合もC言語から調べるというよりは、ハードウェアの仕様書を調べるということになると思います。 質問者 お礼 2018/02/22 23:56 回答有難うございます。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 1 noname#252929 2018/02/21 00:36 回答No.2 それはOSの仕事ですが。。。 OS他のプログラムに割り当てているエリアを、勝手にスタティックでプログラムがアサインしたらどうなるかわかると思いますけど。 もちろん、スタティックでアサインする方法もありますが、それはプロセスの違うプログラムとのやる取りをするなどの場合に使う手ですね。 その場合でも、OSから割り当ててもらうのには変わりはありません。 >パソコンによって違うのでしょうか? それじゃ、パソコンごとにプログラム作るのでしょうか? 世の中ノーパソコンの機種をみんな調べないといけないですし、ソフトをリリースした後に発売されたパソコンにはどの様に対処しましょうねぇ? そうやって考えればわかると思いますが。。。 C言語の特徴になるポインタってものが理解できていれば、その辺もわかりやすいと思うのですけどね。 質問者 お礼 2018/02/21 22:39 回答有難うございます。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 1 wormhole ベストアンサー率28% (1626/5665) 2018/02/20 23:33 回答No.1 プラットホームにより異なりますし調べる方法もプラットホームにより異なります。 質問者 お礼 2018/02/21 22:38 回答有難うございます。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 1 カテゴリ [技術者向] コンピュータープログラミング・開発C・C++・C# 関連するQ&A C++でメモリの絶対番地を指定する方法はありますか。 C++でメモリの絶対番地を指定する方法はありますか。 あるプログラムでメモリの指定した番地にデータを書き込み、別のプログラムで同じ番地のデータを読み込めるようにしたいと思ってます。プログラムは作ったのですが、絶対番地を指定していないようで、別のプログラム側で同じ番地を指定しても同じデータが読み込めません。 C言語におけるローカル変数が使用するメモリについて 例のようなC言語のプログラムを動かした場合、 確保されるメモリ領域はどうなるのでしょうか。 例 #include <stdio.h> int main(void) { int a = 0; } このとき、変数aはint型なのでスタック領域に4バイトのメモリが確保されると理解しています。 と同時にaという変数名と確保されたスタック領域の番地を紐づけるようなメモリがどこかに確保されるのではないかと思ってるのですが、この理解で正しいでしょうか。 またその場合は変数aの番地はどの領域に確保されるのでしょうか。 ご教示お願いいたします。 C/C++言語のメモリについて C言語でメモリを2種類?に分けると、スタックとヒープがあります。 ヒープは mallocなどで確保し、freeで解放しますがスタックは解放する必要がありません。 そのスタックは通常、何バイトまで可能なのでしょうか? あと関数外のファイルの先頭に int[1000000];とした場合、このメモリはmallocで確保していませんが、 どこに作られるのでしょうか? 私のパソコンはメモリが2GBでWindows2000ですが、CやC++で最大、何バイトまでメモリが使えますか? また、一番多くメモリを確保できるなら、OSはなんでも構いません。 解釈等も間違っていたらご指摘していただきたいです。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム C言語で200MBメモリをとるプログラムを書くには、どう書けばいいですか? タイトルのとおりなのですが、C言語で200MBメモリをとるプログラムを書くには、どう書けばいいですか? 一般的な例題として出題されています。 ご教授よろしくおねがいします。 C言語とC++言語 C言語でコンパイルできC++でコンパイルできないプログラムとその逆でC++でコンパイルできC言語でコンパイルできないプログラムを教えてください。よろしく C言語 mallocによる消費メモリ char *b = (char *)malloc(sizeof(char) * 6) というC言語のプログラムで、消費されるメモリは何バイトになるのでしょうか?理由も合わせて教えていただきたいです。 32ビットのPCで行うものとしてよろしくお願いいたします。 C言語 メモリ? 最近、C言語の勉強を始めているものです。 gccでコンパイルし、実行ファイルを実行すると 強制終了 と表示されます。 gdbで実行してみると、 Program terminated with signal SIGKILL, Killed. The program no longer exists. You can't do that without a process to debug. と表示されました。 プログラムの中で、二次元配列 a[10000][10000],b[10000][10000] というような大きい配列を使っているのが原因なのかなと思っていますが、どうなんでしょうか?mallocでメモリを確保したらいいのでしょうか? ソースを載せることができなく申し訳ないですが、よろしくお願いします。 C言語でのプログラムの作り方 はじめまして。C言語初心者の中学一年生です。 C言語でプログラムを作ろうと思ったのですが、やり方がわかりません。 ”hello”と表示するプログラムの作り方を教えてください。 使用しているコンパイラは"Visual C++ 2010"です。パソコンはWindows xpです。 中学生でも分かるように教えてください。 エディエタ、やソースプログラムなどの用語についても教えてくださると嬉しいです。 C言語をどうしたら? 学校でC言語を習っています。 そして学校ではC言語を確かビュジアルネットというソフトにソースファイルなどを入れてプログラムを練習しているのですが、家でも練習したいのでどうしたらいいか教えてください。できましたらフリーソフトとその使い方を教えてくださるとうれしいです。 そして、いつかは他のパソコンでもそれが体験できるようにしたいので、その場合の方法も教えてください。 C言語 行列 配列 現在、C言語を勉強中です。 C言語で (10000*10000)の大きさの行列を扱いたいです。 double a[10000][10000]の配列ではメモリ不足となってしまいます。 このような場合はどのようにプログラムを組んでいったら良いのでしょうか? C言語(またはC++言語)についての質問です。 C言語(またはC++言語)において、以下の変数x、ポインタ変数(*p,**pp, ***ppp)のメモリ上のイメージを記述しなさい。 int x, *p, **pp, ***ppp; x=10; p=&x; pp=&p; pppp=&pp; という問題なのですが、わからなくて困っています。 このプログラムはどのようなものなのでしょうか。 詳しい回答をよろしくお願いします。 C言語 プログラム言語のC言語について教えて下さい。 昔BASICを少し勉強しました。 それからプログラム言語から離れてましたがC言語を見て疑問があります。 BASICなら例えば最初に 10 ~ 20 GO TO~ みたいに上段、左詰めでプログラムを書いてましたがC言語って本を見るとやたら左側が膨らんだ?ような空白みたいな表記になってますよね?(説明下手でごめんなさい) この空白みたいな意味が分からないし、この空白?もスペースキーで打つのか分かりません。 C言語の表記の仕方について詳しい方、こんな初心者にでも簡単に分かるように説明して下さる方いたらよろしくお願いします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム C言語で何を作りますか? C言語で何を作りますか? Cが使える方に質問です。私はC言語で入門編くらいを終えたレベルです。 一通りやったのですが、やはり意味のあるプログラムが作れるレベルでは全くありません。 Cを普段使っている人は、個人レベルで何かプログラムなどを書いたりするのでしょうか?(例えば、この機能が欲しいからこういったプログラムを書こうなど) 回答お願いします。 C言語学習について 大学4年生で研究室に配属されています。プログラムをする学科にいますが、あまりプログラムを作れません。 C言語の文法書を読んだり、サンプルプログラムを見たりしてはいます。独学はなかなか難しいです。 特にC言語でつくりたいものもありません。 C言語を使えるようになりたいのですがどうしたらいいでしょうか。C言語のいろいろな本を借りたり見たりはしています。実際に作った方が身につくとは思うのですが。サンプルプログラムを打つのも飽きてしまいます。 C++とかJAVAとかありますが、C言語しか使ったことがないのですが気になります。 近くにプログラムを教えてくれるような教室もありません。 助言お願いします。 C言語での実行 C言語(ボーランドのCpad)を使っています。 いつも使ってるパソコンと違うパソコンでC言語のプログラムをし始めました。 前のパソコンと同じようにプログラムのコードをCファイルで保存して同じように新しいパソコンから開いて同じように実行ボタン押したのですが、実行できず、exeファイルが存在しませんって表示されます。 ちなみに、動かすプログラムは4つあり、そのうちの3つはちゃんと実行でき、ファイルも作成できるのですが、同じ方法でやってるあと1つのプログラムだけがうまくいきません。 4つとも同じフォルダにするようにしていて、3つはちゃんと実行できるので、フォルダが違うことはないと思います。 なぜ「exeファイルが存在しません」ってなるのか。 ちゃんとフォルダにCファイルはあるのに。 ちなみに、正確にできる3つのように、実行できると「OBJファイル」とか「アプリケーション」とかも同時に作成されます。 ただ、問題の1つのプログラムは当然、実行できず、exeファイルが存在しませんって表示されるので何も作成されません。 ボーランドのC言語、実行、ファイル、など詳しい方ぜひ教えて下さい。 同じやり方で今までのパソコンではできていたのに、パソコン変えると実行できなくなります。 フォルダやCファイルが正確ではないのかとも思いましたが、前までのパソコン通りにやっているので問題ないと思います。 ぜひアドバイス下さい。 C言語でといわれたらC++も含む? あるゲーム会社の採用情報ページに、C言語でのプログラムソースの 提出が求められていました。 その場合、常識的な解釈として「C言語」というのは、「C++」は使わない ということなのでしょうか。 それとも、両方用いても構わないと言う意味の「C言語」なのでしょうか。 そんなものその会社に聞けといわれそうなのですけれども、 一般的にもそのあたりどうなのでしょうか。 Cの世界では「C言語」というと、「C++も含む」というニュアンスも あるのでしょうか。 C言語3問 C言語です。この3問のプログラムを教えてください。よろしくお願いします。 C言語について C言語初心者です。 「かんたんC言語」という書籍で学習しております。 コマンドプロンプトでのプログラムの実行方法がよくわかりません。 教えて頂けないでしょうか? アセンブリ言語とC言語 アセンブリ言語とC言語について調べているのですが、この二つ言語のプログラムについて実質的に同じと言えることはなんでしょうか? また異なっていることはなんでしょうか?(たとえばアセンブリは低級言語であり、C言語は高級言語であるなどなんでもいいです。) 是非解答お願いします。 C言語2問 C言語です。問題2問のプログラムを教えていただきたいです。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
回答有難うございます。