0
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 3 years have passed since last update.

C言語でリングバッファ、std::mapもどき

Last updated at Posted at 2021-08-10

概要

C言語、組み込み、リソースが制約された環境下で使用できるライブラリです。
MITライセンス。

ダウンロード

LibCE(GitHub)
久しぶりにmakefileを書いたのでものすごく自信が無いです。アドバイス歓迎。

背景

末端下請けで色々なお客様から仕事を頂いておりますが、このやり方で仕事をしている場合、「権利ごと売り渡す」契約になっていることがほとんどです。

が、リングバッファとか、map(連想配列)とかは、大体どんなソフトを作るにあたっても欲しい。C++が使えればstd::vectorやstd::mapがあるので問題ないけど、Cには無い。自分の請けた範囲では、組み込みの案件では、いまだにCしか使えない場合が多い。

しょうがないので、お客様ごとに似たような機能で実装が違うモジュールを作って使用しているわけですが、もう、いいかげん面倒くさい。どうしてくれよう。

で、考えたのが、これまた契約において、「既存のものの権利は甲に属さない」となっている(あたりまえだけど)ので、案件のないときにあらかじめ作ってMITライセンスで公開してしまえば、どこで使っても契約違反にならない。はず。
色々契約書をひっくり返して眺めたけど、いけるはず。法律・権利関係は専門家でないので確実ではないですが、MITなら問題なさそう。ライセンス料とかいらない。ただ効率悪すぎるので使わせてくれ。

・・・ということで公開します。

ポリシー的な、言い訳的な何か

ポリシーと言えばそうなのですが、実装が面倒で省略している、というのも真実。
実利用で問題が出たことがないので、これでいいだろうという判断です。
ただ、アラフィフのじじいが言ってることなので、昔の観念から抜け出せていない可能性もあります。もっといい方法論があるかもしれません。

Remove、Delete(相当)は要らない

電源入れたらそのまま動きっぱなし、電源切ったらそこでCPUは動かなくなる。バッテリーバックアップさえされていないことがあるので、そもそもシャットダウン処理できない。
また、複数目的で使用する端末ではない。あらかじめ決めた機能容量で動かす。開発中に残記憶容量の関係などで増減はあるが、出荷時には確定する。
Remove、Deleteでき、それ前提で作っていると、メモリリーク的な現象が起きたりする。必要な容量は決まってるんだから、最初に用意して使う。

結論。追加(Add)は必要だが、削除(Remove)は要らない。

Heapを使わない

環境によっては、そもそもmallocが無かったりしたこともあった。
高級言語を使っているとnewは当たり前で、もはやガベージコレクションさえかなりの環境で提供されているが、メモリアロケーションとは本来結構難しい問題をはらんでいる。で、さらにメモリリークの問題。使ってる最中に動かなくなる機器とか最悪。

結論。Heapを使わない。あらかじめ作業領域を確保して使う。

雑感

皆さん、背景にあるような場合、どうしてるんでしょうかねえ・・・?
今後の更新どうしよう。

0
0
1

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
0
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?