C言語・C におけるメモリ領域とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > C言語・C におけるメモリ領域の意味・解説 

C言語・C++におけるメモリ領域

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/22 07:15 UTC 版)

バッファオーバーラン」の記事における「C言語・C++におけるメモリ領域」の解説

スタックベースのバッファオーバーフローについて説明するためにプロセスメモリ利用方法復習するオペレーティングシステム (OS) は各ユーザプロセスに仮想アドレス空間割り振りWindowsLinuxなどのOSでは上位アドレスカーネルが使うカーネル空間とし、残りをユーザプロセス自身用いユーザ空間とする。カーネル空間はユーザプロセスがアクセスする事はできず、通常のプログラミングでは意識する事はない。 C言語C++書かれプログラム場合ユーザ空間をさらに分割する。これらの言語書かれプログラムでは、仮想アドレスの最低位箇所から順にプログラムの実行コードを置くコード領域テキスト領域とも)、初期化された静的変数大域変数を置くデータ領域初期化されていない静的変数大域変数を置くbss領域malloc等で動的に確保されメモリを置く(可変サイズの)ヒープ領域確保する。(なおデータ領域bss領域合わせて静的領域という)。 一方ユーザ空間における仮想アドレス最高位箇所関数コールスタック保存する可変サイズの)スタック領域として用いられる。 最低位最高位 コード領域 静的領域 ヒープ領域高位向かって成長→) … スタック領域(←低位向かって成長データ領域 bss領域 スタック領域プロセス中で呼ばれる関数コールスタック格納する領域で、コールスタック中の各関数データスタックフレームという)を並べて格納している。プロセス中で関数fが関数gを呼び出した場合コールスタックは以下のようになる低位アドレス高位アドレス … gのスタックフレーム fのスタックフレーム … … gの処理に必要な一時的な情報 gの局所変数 gのSFP gのリターンアドレス gの引数の値 fの処理に必要な一時的な情報 … … プロセスで現在実行中の関数スタックフレーム位置覚えるためにプロセッサによって用いられるのがフレームポインタ(=x86ではebp)で具体的には(現在実行中の関数がgであれば)gのSFPアドレス指している。SFP関数呼び出し時に呼び出し元の関数のフレームポインタのアドレス覚えるための領域で、fがgを呼び出した際、スタックフレームの値(=fのSFPアドレス)をgのSFP格納する。なお、SPFは「Saved Frame Pointer」の略で日本語訳は「退避されたフレームポインタ」である。 一方gのリターンアドレス呼び出し関数fのプログラムカウンタ(命令ポインタとも。x86ではeip)のアドレス格納する

※この「C言語・C++におけるメモリ領域」の解説は、「バッファオーバーラン」の解説の一部です。
「C言語・C++におけるメモリ領域」を含む「バッファオーバーラン」の記事については、「バッファオーバーラン」の概要を参照ください。

ウィキペディア小見出し辞書の「C言語・C におけるメモリ領域」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「C言語・C におけるメモリ領域」の関連用語

1
2% |||||

C言語・C におけるメモリ領域のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



C言語・C におけるメモリ領域のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのバッファオーバーラン (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS