0

Cで実装されたリンクリストデータ構造を作成したかったのです。リンクリストを作成するというアイデアでした。

ll:new() -> listId.

上記のListIdは、リスト上のある種のハンドルとして機能するCコードに返されるある種の「ポインター」を表します。リストが非常に大きくなる可能性があると想像していたので、リスト自体を前後に渡す必要がないことを望んでいました。リンクリストが作成されると、ユーザーは明白な方法でリストを操作します。

ll:add(ListId, Elt)
ll:add_after(ListId, Pos, Elt)

ErlangのNIF機能を介してこれを行うことを想像しました。これが機能するためには、C側は、add、add_afterなどの複数の呼び出しにわたってリストを維持する必要があります。

ストレートCでは、ユーザーが対話する主な機能があり、プログラムを存続させ、それによってユーザーがプログラムを対話している間、リンクリストを保持します。私が理解しているように、NIFは主な機能のないCコードを利用しています。つまり、NIFへの各呼び出しは1回限りのタイプの提案です。

誰かが私に(それが適切であると仮定して)どのようにNIFを利用して複数の呼び出しにわたって状態を維持する必要があるCコードと対話することができるかについてのいくつかの指針を教えてもらえますか?それが明確だったといいのですが!

4

2 に答える 2

1

リソース オブジェクトのドキュメントを確認してください。NIF API を使用すると、erlang GC を使用して、リストを作成したプロセスがクラッシュした場合に、作成したリストを GC することもできます!

于 2012-01-25T18:37:17.503 に答える
0

C の「静的」変数は呼び出し間で値を保持できますが、この方法は強くお勧めしません。何らかの状態が必要な場合は、erlang の「ports」を確認することをお勧めします。

于 2012-01-25T17:05:13.233 に答える