すでにネタが枯渇した状態で、一ヶ月以内に投稿するというのはかなり至難の業です。今回は保守のための投稿だけとし、近いうちにまともな記事を書きたいと思います。
2009-06-27(Sat) | 雑 | comment : 0 | Trackback : 0
TECSの仕様を検討している際に何度か話題に上がったのですが、クラス(というか構造体)のメンバのうち、一部をROMに、残りをRAMに配置する方法がないものでしょうか? 今回はこれについて考えてみます。
C++には、メンバの一部をROMに、残りをRAMに配置するための直接的なシンタックスはありません。これはCの場合でも同じです。これを実現するには、通常次のようにしなければなりません。
struct rom_part
{
...
};
struct ram_part
{
rom_part const* p_rom;
...
};
static rom_part const rom = { ... };
ram_part ram = { &rom, ... };
あるいは、
struct ram_part
{
...
};
struct rom_part
{
ram_part const* p_ram;
...
};
static ram_part ram;
rom_part const rom = { &ram, ... };
のようにすることもできます。一般的には、ROMよりもRAMの方が高速ですので、前者の方が好まれますが、十分使いやすくなるのであれば、後者でもよいかもしれません。ただ、後者の場合、ROMに配置するクラスには明示的なコンストラクタやデストラクタを定義できませんので、使い勝手がよくなる可能性はそれほど高くありません。
[このエントリの全文を表示]
2009-05-27(Wed) | 実装技術 | comment : 0 | Trackback : 0
FC2ブログはすぐに「スポンサーサイト」にされてしまうので、保守の意味でも、今回はよく受ける質問から「C++で書いたHello, World!はなぜデカいか?」について書いてみることにします。
C++でstd::coutを使ったHello, World!を書くと、驚くほどプログラムサイズが大きくなってしまいます。リンカが出力するマップファイルをみるなどすれば分かりますが、使ってもいない関数が大量にリンクされていると思います。これは一体何なのでしょうか?
std::coutというか、std::basic_ostreamクラステンプレートでは、文字列を出力する際に、内部的にstd::codecvtファセットという機能を用います。これは、主に文字コードを変換するためのものです。例えば、プログラム内部ではUTF-8を使うけれども、外部に出力する際にはシフトJISにしないといけない場合には、ファセットの機能を用いて文字コードの変換を行うわけです。
また、数値と文字列の変換には、std::num_getやstd::num_putファセットが必要になります。その他にも、何種類かのファセットが定義されています。これらのファセットは、std::localeクラスおよびその派生クラスが持っているわけですが、ロケールの切り替えは動的に行うことを前提としているため、サポートしている全ロケールのコードがリンクされてしまうことになります。
これでは、ごくごく単純なHello, World!を出力するだけのプログラムであっても、サイズが非常に大きくなってしまいます。実際のところ、ロケールの機能を使いこなせる技術者はそう多くありませんし、使いこなせたとしても、本当に使いこなす機会はそう多くはありません。そう考えると、この機能はかなり冗長なものです。
ロケール周りを適切にカスタマイズしたストリームクラスを再実装するか、独自のストリームクラス群を定義することで、サイズの問題は大幅に改善する可能性があります。
2009-04-27(Mon) | 実装技術 | comment : 0 | Trackback : 0
こちらのブログでは未紹介でしたので、念のため書いておきます。今週、「組込みプレスSelection #1」ということで、
『組込みエンジニアのための C/C++プログラミングのヒント』
が発売されます。私が「組込みプレス Vol.6」で書いた記事も収録されているようです。
もう一冊と違って、何名かの著者の手による記事が掲載されていますので、その意味では無難な出来になっていると思います。その点、
『組込み現場の「C++」プログラミング 明日から使える徹底入門』
の場合は、私の文章が気に入らなければ一冊丸ごと不満に思うことでしょう(逆もまた真ですが)。
実際に発売される日は書店によって若干の違いがあるとは思いますが、遅いところでも4月上旬には出るはずです。これら2冊を読んで参考にされるのもよし、アマゾン等で酷評するのもよし、といったところです。
2009-03-23(Mon) | 雑 | comment : 2 | Trackback : 0
最近は宣伝ばかりですが、タイトルのとおり、来週、技術評論社から拙著
『組込み現場の「C++」プログラミング明日から使える徹底入門 』が発売になります。興味のある方は読んでみてください。
2009-03-16(Mon) | 雑 | comment : 0 | Trackback : 0