KHPC ver.0.01の内部資料的なもの

  • (by K, 2016.05.19)

基本仕様

  • KHPCの2番目のバージョン。KHPCはpersistent-Cの簡易実装を目指したツール群。
  • 基本方針: とにかくできるだけ手抜きをする。次のバージョンでまともにすればいい。手抜きは美徳である。
  • このバージョンの目玉:「persistent命令」をサポートする。

ダウンロード

サンプルコード

#include <stdio.h>
#include <khpc0.h>

persistent int i = 0, sum = 0;
persistent char str[16] = "hello, world";

int main()
{
    persistent_load(0);
    for (; i <= 100; i++) {
        persistent_save(0);
        sum += i;
    }
    printf("sum=%d\n", sum);
    return 0;
}

ビルド方法

  • (1) prompt>mksrc test.c > pd-test.c を実行する。
    • すると pd-test.c というファイルが生成される。
  • (2) prompt>mksrc :PDEF test.c > pdef.c を実行する。
    • すると pdef.c が生成される。
  • (3) prompt>gcc -o test.exe -O3 -I. pd-test.c pdef.c khpc0.c とする。
    • これで出来上がり。
    • gccでtest.cを指定する必要はないです。test.cの内容はpd-test.cにすべて反映されています。
    • khpc0.cはライブラリです。
  • (4) なんでこんなややこしい仕様なのかというと、分割コンパイルにも対応できるようにするためです。もし、ファイルが、prog0.c prog1.c prog2.cの3つに分割されていたら、以下のようにします。
    prompt>mksrc prog0.c > pd-prog0.c
    prompt>mksrc prog1.c > pd-prog1.c
    prompt>mksrc prog2.c > pd-prog2.c
    prompt>mksrc :PDEF prog0.c prog1.c prog2.c > pdef.c
    prompt>gcc -o prog.exe -O3 -I. pd-prog0.c pd-prog1.c pd-prog2.c pdef.c khpc0.c
    • 説明の都合上、プロンプトから入力するかのように書いていますが、実際はバッチファイルかMakefileにするのがよいでしょう。


  • pd-test.cの実体はこんな感じです。なーんだ、と言いたくなる内容かもしれません。
    #define persistent
    #include "test.c"
    void persistent_def(void *p, int size, int grpId, const char *id);
    
    void persistent_default_test_c()
    {
        persistent_def(&i, sizeof(i), 0, "i");
        persistent_def(&sum, sizeof(sum), 0, "sum");
        persistent_def( str, sizeof(str), 0, "str");
    }
  • pdef.cの実体はこんな感じです。
    void persistent_grp(int grpId, const char *path, const char *tmp, const char *memo);
    
    void persistent_default_test_c();
    
    void persistent_default()
    {
        persistent_grp(0, "p-vars.pbd", "p-vars.pb_", "(local)");
        persistent_default_test_c();
        return;
    }
  • この persistent_default() は persistent_load(0); のタイミングで自動的に呼び出されます。

関数群

メモなど

こめんと欄


コメントお名前NameLink

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-05-27 (金) 21:36:24 (2907d)