タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

programmingとgccとcに関するtztのブックマーク (5)

  • ハードウェアを意識したプログラミングの基礎(後編)

    前編では,デバイス・ドライバを理解するために必要なエンディアンやI/Oアクセス,ハードウェアとソフトウェアの境界について説明した.後編では,アクセス時のアラインメントについて説明した後,実際のコードを示しながらLinuxデバイス・ドライバの例を紹介する.  (編集部) 1.アクセスは境界に沿って エンディアン,I/Oアクセス,ハードウェアの次に問題になるのが,アクセス時のアラインメントです.CPUによってはアラインメントが合っていないアクセスが起こるとエラーになったり,意図しないデータが読めたりします.最後に紹介していますが,実は,知らないと一番見つけづらいところかもしれません. まず,「アラインメントが合っていないアクセス」が,どういうものかを定義しましょう. ここでは,「アクセスしようとしているアドレス値をアクセス幅で割ったときに,余りが出るようなアクセス」を「アラインメントが合ってい

    tzt
    tzt 2010/02/13
    アライメントに合わせてアクセスしなきゃいけないCPUでも__attribute__((__packed__))つけるとgccが良しなにコードを生成してくれる。遅いだろうけど。
  • ホワット・ア・ワンダフル・ワールド strict aliasing rule

    来週からは後期スタートだというのに,生活ペースはメチャクチャ.昨日は 17 時に起きてしまい,今日は 22 時半ごろに起きてしまった今日この頃,皆様いかがお過ごしでしたでしょうか ? まぁ,順調に 6 時間ずつズレているので,明日には元に戻るかなと. しっかし,なんで夜型の方には一瞬で 6 時間とか 12 時間とか平気でズレるのに,朝方の方には意識しないと絶対にズレないんでしょうかね ? まぁ,朝の 3 時とかにバリバリ活動しているってのは,ある意味朝型と言えなくもないような (ことはない). 僕は夜はあんまり生産的な方面にやる気が出ない人なので,夜型になると研究がさっぱり進まないと言う.いろいろ危機です. あと,Debian にテキトーなパッケージをいっぱい突っ込んでいたら,何故か日語の TTF (フォント) が表示されなくなってしまいました.そんなこんなで今はビットマップな生活なんで

  • type punning と strict aliasing - memologue

    /.JのGCC-3.4リリースの話題を追っていたら、GCC3では-O2で-fstrict-aliasingが有効だから注意せよというポスト(http://slashdot.jp/comments.pl?sid=175355&cid=537217)があった。 strict aliasing については、Radium Software Developmentさんが詳しい。これは気にしておいたほうがよさそうだ。GCCの -fstrict-aliasing の説明は次。 コンパイルされている言語に適用可能な別名規則(aliasing rule)のうち最も厳密なものをコンパイラが前提することを許します。これによって、 C(およびC++)では式の型に基く最適化を動作させることになります。例えば、ある型のオブジェクトが別の型のオブジェクトと同一アドレスに位置することは、それら2つの型がほとんど同一でない

    type punning と strict aliasing - memologue
  • OBB vs AABB - Radium Software Development

    This domain may be for sale!

  • RAIIもどき in C __attribute__((cleanup(fn)))

    gccの__attribute__((cleanup(fn))) が便利すぎる件について。 C++でコードを書くときは、RAIIとか呼ばれているイディオムを使えば、ご存じの通り、ロックしたmutexを手動で開放する必要もないですし、newしたオブジェクトを手動でdeleteする必要もないです。 void Baz::boo() const { boost::mutex::scoped_lock lock(mutex); // ... return; // lock変数のデストラクタで自動開放。手動での開放不要 }でもC言語だと、当然ながら手動で開放しないといけません。複数箇所でreturnしている場合など、タイプが面倒臭すぎ。 int foo() { pthread_mutex_lock(&mutex); // ... if (hogehoge) { pthread_mutex_unlock

    RAIIもどき in C __attribute__((cleanup(fn)))
  • 1