21:13:23 # Life 今月読んだ本の読書メモ。
05:52:51 # Life CPUのキャッシュサイズとキャッシュラインサイズ。CPUごとに微妙に違う、最近のIntelCPUだとだいたい全部64バイトっぽいんだけどカーネルがむしろ知っているべきであり、その情報を読んでlibcが教えてくれるべき値のようだ。 sysconfで得られる情報に_SC_LEVEL1_DCACHE_SIZE、_SC_LEVEL1_DCACHE_LINESIZE、というのがあるみたい。これをつかえばよいのかな。
11:40:49 # Life RustのベンチマークツールCriterionを試してみた。 cargo benchの#[bench]については標準版はnightlyっぽいので仕方なく外部Crateを。 criterion。 なんか標準の書き方に比べるとちょっとめんどくさい。 だけどHTMLを生成してくれて立派な感じである。あと二回目の実行したときにRegressionがあったとか教えてくれる。何も変えていないのに二度目に走らせたらRegressionがあるとはめんどくさいなぁとおもうけどまぁよい。 実行するときにcargo benchとする必要があるのかな。どこまでが標準に入っていないのかよくわかっていない。
09:23:10 # Life C++の文字列定数について。なんか結構不思議な挙動をするのに気づいた。 constexpr char buf1[]はなんとわざわざ文字列をスタックにコピーしてくれるらしい。そういう挙動を期待していなかったのでちょっとおどろいた。 staticつけたら期待した定数的な動きをしてくれたのでまぁそれでよいんだが。constexprで生成した文字列のコピーはスタックに存在して変更可能、ということなんだと思うけど コンパイラの挙動を見る限りではアドレスはあってそれを書き換えられるけどなんかその値を参照していないように見える。
constexpr char kBuf[] = "in .rodata"; func() { constexpr char buf1[] = "copied to stack"; static constexpr char buf2[] = "in .rodata"; }