2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

🦀ひとりWASM-4とRustでゲームをつくる⚙Advent Calendar 2022

Day 12

ラストのまほう 第12話『メモリレイアウトを見てみる』

Last updated at Posted at 2022-12-11

WASM-4のメモリレイアウト

WASM-4のメモリ空間はなんと64キロバイトしかありません。その限られたメモリをやりくりして、フレームバッファ(つまり画面に表示する内容を入れるメモリ空間)を確保し、 文字列や画像のようなリソースを読み込み、ゲーム実行中の内部状態を保持しなければなりません。

具体的には、次のようなメモリレイアウトになっています。

アドレス サイズ (Bytes) 内容
$0000 4 Unused
$0004 16 PALETTE
$0014 2 DRAW_COLORS
$0016 4 GAMEPADS
$001a 2 MOUSE_X
$001c 2 MOUSE_Y
$001e 1 MOUSE_BUTTONS
$001f 1 SYSTEM_FLAGS
$0020 1 NETPLAY
$0021 127 Reserved for future use
$00a0 6400 FRAMEBUFFER
$19a0 58976 Available program memory

つまり、64キロバイトのうち先頭の6580バイトがWASM-4のシステム用に予約されていて、残りの部分をプログラムを実行するためのスタックとヒープに割り当てます。

プログラムを書いているときに常にこのレイアウトを頭に入れておかなければならないなどということはありませんが、メモリが限られているということは意識したほうがよさそうです。別の記事で触れるつもりですが、メモリを使いすぎてスタックをオーバーフローすると、フレームバッファが侵食されてゲーム画面上に変なノイズが走ったりします。JavaScriptランタイムのような環境だとありえないような生々しい現象ですね。

メモリの構造を目で確認する

WASM-4の開発ツールを使うと、現在のメモリの状況を視覚的に確認することができます。F8キーを押して開発ツールを開き、「mem」のタブを選択すると、次のようなメモリマップを見ることができます。

localhost_4444_(iPad Air).png

たぶん構造としてはこんな感じになってると思います。

map.png

参考文献

次回予告

せっかくなので次回ももうちょっと生メモリで遊びます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?