NEPLg2 Standard Library - mem
Web Playground
Web Playground

mem: メモリ管理と低レベルロード/ストア

目的:

実装(アルゴリズム):

注意(重要):

計算量:

todo memory.copy などを使って効率を上げる


TEST
#entry main
#target std
#import "std/test" as *
#import "core/mem" as *
fn main <()*>()> ():
    assert_eq_i32 0 align8 0;
    assert_eq_i32 8 align8 1;
    assert_eq_i32 8 align8 8;
    assert_eq_i32 16 align8 9;
TEST
#entry main
#target std
#import "std/test" as *
#import "core/mem" as *
fn main <()*>()> ():
    let p alloc_raw 4;
    assert ne 0 p;
    store_i32 p 123;
    assert_eq_i32 123 load_i32 p;
    dealloc_raw p 4;

mem_size: 現在のメモリページ数を返す

目的:

実装(アルゴリズム):

注意(重要):

計算量:

mem_grow: メモリを拡張する

目的:

実装(アルゴリズム):

注意(重要):

計算量:

align8: 8 バイト境界に切り上げる

目的:

実装(アルゴリズム):

注意(重要):

計算量:

alloc_raw: ヒープから領域を確保する(生ポインタAPI)

目的:

実装(アルゴリズム):

注意(重要):

計算量:

dealloc_raw: 領域を解放する(生ポインタAPI)

目的:

実装(アルゴリズム):

注意(重要):

計算量:

realloc_raw: 既存領域を再確保する(生ポインタAPI)

目的:

実装(アルゴリズム):

注意(重要):

計算量:

alloc: alloc の結果を Result で返す安全API

目的:

実装(アルゴリズム):

注意(重要):

計算量:

realloc: realloc の結果を Result で返す安全API

目的:

実装(アルゴリズム):

注意(重要):

計算量:

dealloc: dealloc の前提を検査する安全API

目的:

実装(アルゴリズム):

計算量:

load_i32: i32 を読み出す

目的:

実装(アルゴリズム):

注意(重要):

計算量:

store_i32: i32 を書き込む

目的:

実装(アルゴリズム):

注意(重要):

計算量:

load_u8: 1 バイトを読み出す

目的:

実装(アルゴリズム):

注意(重要):

計算量:

store_u8: 1 バイトを書き込む

目的:

実装(アルゴリズム):

注意(重要):

計算量:

memset_u8: バイト列を同じ値で埋める

目的:

実装(アルゴリズム):

注意(重要):

計算量:

TEST
#entry main
#target std
#import "std/test" as *
#import "core/mem" as *
fn main <()*>()> ():
    let p <i32> alloc_raw 8;
    memset_u8 p 8 65;
    assert_eq_i32 65 load_u8 add p 0;
    assert_eq_i32 65 load_u8 add p 7;
    dealloc_raw p 8;

fill_u8: memset_u8 の同義 API

目的:

実装(アルゴリズム):

注意(重要):

計算量:

fill_i32: i32 配列を同じ値で埋める

目的:

実装(アルゴリズム):

注意(重要):

計算量:

TEST
#entry main
#target std
#import "std/test" as *
#import "core/mem" as *
fn main <()*>()> ():
    let p <i32> alloc_raw 16;
    fill_i32 p 4 42;
    assert_eq_i32 42 load_i32 add p 0;
    assert_eq_i32 42 load_i32 add p 12;
    dealloc_raw p 16;

memset_u8: MemPtr<u8> を受け取る安全オーバーロード

目的:

fill_u8: MemPtr<u8> を受け取る安全オーバーロード

目的:

fill_i32: MemPtr<i32> を受け取る安全オーバーロード

目的:

load_i32: MemPtr<i32> から i32 を安全に読み出すオーバーロード

目的:

store_i32: MemPtr<i32> へ i32 を安全に書き込むオーバーロード

目的:

load_u8: MemPtr<u8> から 1 バイトを安全に読み出すオーバーロード

目的:

store_u8: MemPtr<u8> へ 1 バイトを書き込む安全オーバーロード

目的:

size_of: 型のサイズを取得する

目的:

実装(アルゴリズム):

注意(重要):

計算量:

align_of: 型のアラインメントを取得する

目的:

実装(アルゴリズム):

注意(重要):

計算量:

load: 任意型をロードする

目的:

実装(アルゴリズム):

注意(重要):

計算量:

store: 任意型をストアする

目的:

実装(アルゴリズム):

注意(重要):

計算量: