atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
雑記
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
雑記
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
雑記
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • 雑記
  • コンパイルの話:マシン語に落ちるということ

雑記

コンパイルの話:マシン語に落ちるということ

最終更新:2005年12月27日 00:00

匿名ユーザー

- view
管理者のみ編集可
C言語なりなんなりのソースファイルをコンパイルすると、まあ大体マシン語が吐き出される。

その過程において、コンパイラはいろいろ苦労している。前に書いた最適化、なんていうのもそう。

そのほかにも、例えば動的なメモリの確保、なんていうのもそうだ。

メモリは限られたリソースであり、無限に使えるわけじゃない。実行時には最大でもそのPCに乗せてある分しか使えないわけだ。いつ、どのプログラムがどれだけメモリ使うかなんてわからないのに。

なのに、ソースコード上では便利に
unsigned char* pHoge;
pHoge = malloc((size_t)100);
なんてことができちゃう。お気軽お手軽。


こんなことができるのも、OSさんのおかげ。

「ちくしょうまたフリーズかよ」「だからWind○wsは」なんて言っては、いけないのである。

OSの重要な役割はたくさんあるけど、メモリの管理もやってくれているわけだ。

仕組みは、というと、以下はかなり簡略化した話だが、だいたいこうなる。

アプリケーションから「100byteメモリ欲しいよ」と言われたらまずOSが管理しているメモリプールのなかから100byte+αの領域があるかを探す。あったら、まずその領域のサイズやどのアプリケーションに割り当てたかなどの情報を割り当てるメモリの先頭に保存する。

つまり「誰になんぼ貸したか」を記録するわけだ。金貸しの因業ババアみたい。

そして、その情報の後ろの領域をアプリケーションに割り当てる。

つまり、
pHoge = malloc((size_t)100);
としたときにはpHoge[-XX]の領域には動的に割り当てた際の情報が入っている。

逆に開放する際にpHogeに割り当てた際の領域の先頭アドレスをもらうので、そこからアドレスをさかのぼって情報を手繰り、その情報を元にして開放の処理(再びメモリプールにもどす)を行う。

したがって、100byteの領域を10個確保すると、1000byte以上のメモリを使うことになる。

また、A、B、Cそれぞれ100byteづつ確保したとして、Bを解放、その後Dとして200byte確保しようとすると、Bがあいた隙間では足りないのでCの後ろに200byteを確保する。

したがって小さな領域の確保/解放を繰り返すと、メモリが「歯抜け」の状態になってしまう。当然、実際に確保している(必要としている)メモリ容量よりも随分大きなメモリが必要になってしまう。特に、画像などの大きなメモリを必要とする処理などが含まれる場合は顕著だ。


つまり、メモリの動的確保と言うのは
①いちいちOSにお伺いを立てる必要がある(オーバーヘッドがある)
②OSが管理するための要領の分、無駄がある
③メモリのフラグメンテーション(歯抜け状態)をおこしやすい
④追加:解放をうっかり忘れると目も当てられない
・・・という欠点がある。


しかしながらファイルや文字列のサイズなんて実行時にならないとわからないことも多い。

なので、とりあえず妥協策。

大きなサイズのメモリ(ファイルなど)は動的に確保するとして、小さなサイズで必要なものは静的なバッファをもつ。例えば、グローバル領域などに256byteの領域をワーク領域として持っておく。

これを排他的に使えば、小さな領域を一時的に確保/解放する必要はなくなる。また、フラグメンテーションをおこしやすい小さな領域の確保/解放を避けられるので、一粒で二度おいしい。


メモリは、賢く使いましょう。
「コンパイルの話:マシン語に落ちるということ」をウィキ内検索
LINE
シェア
Tweet
雑記
記事メニュー
トップページ

本棚


両手で1000まで数えられますか?:2進法の話
数値 - 危険物取り扱い注意
100 × 200 =32?:変数のオーバーフローの話
パリティビット
小数の扱いについて
ぽいんた
ぽいんた2
ぽいんた3
ジ・オリジン
ジ・オリジン:補足
かっこつける話
かっこつける話2
文字列のこと
タイミングの話
拡張性の話
取り込む話
staticな話

コンパイルの話1
コンパイルの話2:止まらぬビルド
コンパイルの話3:マシン語に落ちるということ1:メモリの話
コンパイルの話4:マシン語に落ちるということ2:最適化
コンパイルの話5:マシン語に落ちるということ3:変数とスタック
コンパイルの話6:コンパイラはそもそも何をやってくれるのか??
リンクの話
プリプロセッサの話

OS、というもの

オブジェクト指向1
オブジェクト指向:2
オブジェクト指向:3

オブジェクト指向:番外 C言語のソースファイルの話
オブジェクト指向:番外 C言語での「再利用性」と「カプセル化」データ構造とアルゴリズム


抽象的な話

寝込んで布団の中で考えたこと
こんなの、常識??
お仕事プログラミング
ソフトでハードなプログラム
プログラムするということ
お勉強
プログラムを学ぶということの補足
C言語:「学問」と「実務」
統合開発環境
C言語ってポータブルですか?
C言語ってポータブルですか?:2
あなたは、どう読みますか?
ああ勘違い
試してガッテン
低級品
質問をするということ
ポカ
「何もしない」 != 「無駄」
エディタの話
もっと手を抜こう

いまどきの、アセンブラ

VisualStudio2005
VisualStudio2005:2

戦争の防ぎ方、に対する私の考え
身近な差別
改革
地球に優しいなんて大嘘
統計で嘘をつく方法

言葉について
言葉について:2

神が死んだということ
善悪の彼岸から、力への意思を目覚めさせるということ

本を読むということ
本を読むということ:2

絵を描く話
地図
地球儀

オカルトのお話
がんだむさん
RPGソフトウェア
記紀神話の不思議



メニュー
記事メニュー2
つらつらと、日々考えたことを書いていこうと思います。
blogでなくてwikiなのは、なんとなくです。
将来的に、他の方にも編集をしてもらえたら、楽かな、と。

さまざまなガラクタな話しかありませんが。。まさに雑記。



  • スポーツベットとは?初心者向けに仕組みと楽しみ方を徹底解説!
  • カジノディーラーの魅力と役割
  • タイのカジノの魅力と体験談
  • カジノの種類を知ろう!初心者からプロまで楽しめるカジノゲームの世界
  • 日本のカジノ現状と楽しみ方
  • カジノルーレットの魅力!楽しく遊べるルーレットの全て
  • オンラインカジノでカウンティングはできる?攻略法の使用について
  • オンラインカジノは稼げるのか?勝率をアップさせる儲かる方法を調査
  • 初心者必見!オンラインカジノの基礎講座とおすすめオンカジ3選
  • オンラインカジノって危なくない?どうして始めたの?質問にお答えします。

10 item(s)
Last-Modified:2025/03/07 20:33:00
最近更新されたページ
  • 7077日前

    メニュー
  • 7077日前

    もっと手を抜こう
  • 7082日前

    統計で嘘をつく方法
  • 7088日前

    地球に優しいなんて大嘘
  • 7092日前

    右側
  • 7093日前

    プリプロセッサの話
  • 7094日前

    リンクの話
  • 7096日前

    小数の扱いについて
  • 7097日前

    パリティビット
  • 7099日前

    100 × 200 =32?:変数のオーバーフローの話
もっと見る
最近更新されたページ
  • 7077日前

    メニュー
  • 7077日前

    もっと手を抜こう
  • 7082日前

    統計で嘘をつく方法
  • 7088日前

    地球に優しいなんて大嘘
  • 7092日前

    右側
  • 7093日前

    プリプロセッサの話
  • 7094日前

    リンクの話
  • 7096日前

    小数の扱いについて
  • 7097日前

    パリティビット
  • 7099日前

    100 × 200 =32?:変数のオーバーフローの話
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  2. MadTown GTA (Beta) まとめウィキ
  3. R.E.P.O. 日本語解説Wiki
  4. シュガードール情報まとめウィキ
  5. ソードランページ @ 非公式wiki
  6. AviUtl2のWiki
  7. Dark War Survival攻略
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. ありふれた職業で世界最強 リベリオンソウル @ ウィキ
  10. 星飼いの詩@ ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 鹿乃つの氏 周辺注意喚起@ウィキ
  5. 初音ミク Wiki
  6. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. 発車メロディーwiki
  8. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  9. 検索してはいけない言葉 @ ウィキ
  10. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. アフロディテ - オレカバトル アプリ版 @ ウィキ
  3. 機体一覧 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  4. Trickster - ストグラ まとめ @ウィキ
  5. ギャング - ストグラ まとめ @ウィキ
  6. 暦家 - ストグラ まとめ @ウィキ
  7. shade - 初音ミク Wiki
  8. グランツーリスモ7/収録車種 - グランツーリスモWiki
  9. ロスサントス救急救命隊 - ストグラ まとめ @ウィキ
  10. MOZU - ストグラ まとめ @ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.