改装中
「構造体のエンディアン」とか「共用体のエンディアン」とかを探しに来た人はこっち.
改装中
改装中
改装中
気が向いたら書く.
改装中
改装中
改装中
気が向いたら書く.
気が向いたら書く.
特定のメモリアドレス範囲にマップされたデバイスのエンディアン判定. デバイス (アドレス) が異なればエンディアンも異なる可能性がある. (実際にそういうデバイスを使ったことがあるわけではなく, 可能性として考えてみているだけ.)
メモリアクセスが遅い CPU の例
シフトが遅い CPU の例
FLV (Flash Video) ファイルのフォーマットを調べていたら, NIXU エンディアンが見つかったのでびっくり! FLV Tag の中にタイムスタンプ (1ms 単位) のフィールドがあるのだが, どうやら最初3バイトで設計されて,後で4バイトに拡張されたらしい. これは次のような配置になっている.
// タイムスタンプ (ms 単位,3バイト整数,ビッグエンディアン) uint8_t timestamp[3]; // 拡張部分 (timestamp の上位8ビットとなる.) uint8_t timestampExtended;
これらを1つの4バイト整数としてみると, ビッグエンディアンを1バイト左ローテートした NIXU エンディアンとなっている! まさかこういうエンディアンが実在するとは思わなかった. こうなると,もうどんなエンディアンが出てきても不思議ではない気がする.
ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか posted with amazlet at 10.06.12 ジュニア,ヘンリー・S. ウォーレン エスアイビーアクセス 売り上げランキング: 27265 おすすめ度の平均: ビットの楽しみたのしみ? たしなみ? ちゃんと読むと得した気分になれます 最後の頑張りに効きます Hackっていうのは、こういうコトさ |
主に2進整数やビットパターンのさまざまな演算技法について解説している. 基本的には (特定のプログラミング言語に依存しない) 数学的な解説が中心だが,C言語によるサンプルコードも示している.
アラインメントやオフセットの計算に使える「2の冪乗の倍数への切り上げ/切り下げ」や, メモリブロックの管理に使える「次の2の冪乗への切り上げ/切り下げ」, (ビット/バイト) エンディアン変換や FFT (高速フーリエ変換) で使われるビットリバース (ビット逆順) などを含む「ビットやバイト単位の並べ替え」など.
|
省メモリプログラミング―メモリ制限のあるシステムのためのソフトウェアパターン集 (Software patterns series) posted with amazlet at 10.06.12 ジェイムズ ノーブル チャールズ ウィアー ピアソンエデュケーション 売り上げランキング: 80302 おすすめ度の平均: メモリ制限のあるシステム分類が上手い 組み込み向けのデザインパターンとしてはまともです。 すべての設計者・プログラマに必須 |
「省メモリ」とあるが,メモリ管理の高速化についても参考になる技法が解説されている. 時々「malloc 高速(化)」などで検索して来る人がいるが, malloc の速度をこれ以上大きく改善する余地はあまりないと思う (あるとしても非常に難しいだろう).その理由は,
それでもなお malloc の高速化それ自体を目指したい人には「(悲愴な顔で) 頑張ってください」としか言えないが, 「アプリケーションのメモリ管理を高速化したいから高速な malloc が欲しい」というのならあまりにも芸がなさすぎる. そういう人はこの本の「第5章 Memory Allocation:メモリ割当て」を読んで反省してください.(笑)
アプリを高速化したいなら,できるだけ malloc/free を呼び出す頻度を減らすこと. そのためには1回の malloc で確保した大きな領域 (メモリプール) に多数のオブジェクトを詰め込む必要がある (これは省メモリにもなる) が, どのオブジェクトを同じ領域に入れるべきかはオブジェクトの寿命 (extent),サイズ, アラインメントなどを考慮して決める必要がある. 特に,寿命を知っているのはアプリケーションだけだ.
ところで,省メモリが高速化につながる場合も多い.昔からメモリと速度のトレードオフ (高速でメモリを大量に使用するアルゴリズム (例えばテーブル参照) を使うか, それとも低速でメモリを少ししか使用しないアルゴリズムを使うか) がよく問題になるので,省メモリと高速化は両立しないと思い込んでいる人もいるだろう. しかし最近の CPU は命令実行速度に比べてメモリアクセス速度がはるかに遅いので, 無駄なメモリを削減したり,メモリ上のデータ配置を変える (同時期に頻繁に使用するデータをなるべく少数のキャッシュラインに集中させる) と高速化されることも多い. (1970年代以前の CPU は命令実行とメモリアクセスが同期していたので同程度の速度だった.)
さて,ここで問題.次のコードで大きな2次元配列 (例えば画像データ) をコピーする場合,(1) と (2) のどちらが速いか.またその理由を述べよ. (理由を書かなければ0点)
int src[M][N], dest[M][N]; unsigned i, j; // (1) for(i = 0; i < M; i++) for(j = 0; j < N; j++) dest[i][j] = src[i][j]; // (2) for(j = 0; j < N; j++) for(i = 0; i < M; i++) dest[i][j] = src[i][j];
|
珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造 posted with amazlet at 10.06.20 ジョン ベントリー ピアソンエデュケーション 売り上げランキング: 7857 おすすめ度の平均: アルゴリズムについて勉強したい人には必読の本です楽しく読めるプログラミングの本 「プログラミング」と言う作業を見つめなおすのに最適。「設計する」と言う概念がよく分からない初級プログラマにも 納得!アルゴリズムは重要 プログラマなら読むべき本 |
|
ブライアン カーニハン ロブ パイク アスキー 売り上げランキング: 20088 おすすめ度の平均: 良著です。入門書の次の次の次くらいに! 繰り返し読む必要あり 絶対にお勧めの本です 良いプログラマになりたいあなたに |
|
Binary Hacks ―ハッカー秘伝のテクニック100選 posted with amazlet at 10.06.12 高林 哲 鵜飼 文敏 佐藤 祐介 浜地 慎一郎 首藤 一幸 オライリー・ジャパン 売り上げランキング: 35295 おすすめ度の平均: 組み込み系の開発者は必携ですハードコア?なソフトウエア 大工さんにおける電動工具の紹介本 当然教科書ではない。でも、とても参考になります。 バイナリアンの基本 |
|
ガベージコレクションのアルゴリズムと実装 posted with amazlet at 10.06.17 中村 成洋 相川 光 秀和システム 売り上げランキング: 4312 おすすめ度の平均: 擬似コードのバグは見て見ぬふりGCの入門書として今のところ最強! |
|
リンカ・ローダ実践開発テクニック―実行ファイルを作成するために必須の技術 (COMPUTER TECHNOLOGY) posted with amazlet at 10.12.18 坂井 弘亮 CQ出版 売り上げランキング: 26556 |
|
Linkers & Loaders posted with amazlet at 10.06.17 John R. Levine オーム社 売り上げランキング: 139529 おすすめ度の平均: プログラムが実行される仕組みが良く分かる概要が書かれた本 ひどい訳 dllのしくみがわかる! パッケージソフト開発者の必読書 |
|
実践 デバッグ技法 ―GDB、DDD、Eclipseによるデバッギング posted with amazlet at 10.06.12 Norman Matloff Peter Salzman オライリージャパン 売り上げランキング: 79214 |
デバッガの理論と実装 (ASCII SOFTWARE SCIENCE Language) posted with amazlet at 10.06.17 ジョナサン・B. ローゼンバーグ アスキー 売り上げランキング: 295384 おすすめ度の平均: デバッグできないとき普通に読んでいくだけでも面白い デバッカの理論には必読 |
|
|
このページの主な更新は Blog でお知らせします.
Copyright © 2007-2011 noocyte, All rights reserved. E-mail: relipmoced (a) yahoo.co.jp (" (a) " を半角のアットマークに書き替えてください.) リンクはご自由に. 「noocyte のプログラミング研究室」トップページに戻る. |