タグ

gccに関するkosakiのブックマーク (32)

  • GNU GCC 最適化オプションとstrip前後のファイルサイズの比較 lsコマンド編

    GNUのGCCコンパイラでは、最適化レベル -O0 - -O3とサイズ重視の-Os、さらにバイナリのストリップ機能があります。 最適化レベルによって、生成されるバイナリのサイズが変わってきます。 ストリップ(strip)によってオブジェクトファイルのシンボルを削除することによってもファイルサイズは変わってきます。 gcc version 3.4.6 [FreeBSD] 20060305には最適化レベルには -O0 -O1 -O2 -O3 -Os があります。 gccに-Wl,-sをつけることでldコマンドにstripの指示を出すことができます。 今回は、lsコマンドのコンパイルオプションで最適化レベルの設定を変更したり、stripの有り無しで、できあがるバイナリサイズを比較してみました。 コンパイルコマンドは下記の通りです。 cc -lutil cmp.c ls.c print.c uti

    kosaki
    kosaki 2010/02/11
  • Linux の共有ライブラリの挙動について - daily dayflower

    前フリが長くなったので基礎的な部分は独立した article にしました。でも基礎的な内容だけに間違いが多そうです。ご指摘お願いします。 下記に「Hack#??」と書いてあるものはすべて Binary Hacks の Hack です。書籍をお持ちの方はそちらをご参照ください。 基礎 まず用語定義を引用しておきます。 シンボル(symbol) 一般的には記号を意味するが,Binary Hacks の文脈では,リンカが関数や変数を識別するときに用いる名前のことを指す。 Binary Hacks - Hack#6 (強調部は dayflower による) さて,共有ライブラリを利用する際の挙動について「Hack#6 静的ライブラリと共有ライブラリ」から抜粋します。 ここでのポイントは,共有ライブラリ単位で処理が行われるということと,リンクする時には必要としている共有ライブラリの SONAME だ

    Linux の共有ライブラリの挙動について - daily dayflower
  • ld 2.18 の -Bsymbolic オプションを使うと共有ライブラリ内でシンボルをローカルバインドできる - daily dayflower

    Linux の共有ライブラリの挙動について - daily dayflower の続きです。 下記は Ubuntu Hardy (8.04) i386 で動作確認しました。 ld 2.18 の -Bsymbolic オプション 昨日書いた通り,Linux で共有ライブラリを利用したプログラムを作る場合,共有ライブラリ内部の関数呼び出し(や変数アクセス)は ld.so を経由して行われます。 このパフォーマンスゲインやシンボル解決の危険性を解決するために ld 2.18 から -Bsymbolic オプションが新設されました。マニュアルから引用します。 -Bsymbolic When creating a shared library, bind references to global symbols to the definition within the shared library,

    ld 2.18 の -Bsymbolic オプションを使うと共有ライブラリ内でシンボルをローカルバインドできる - daily dayflower
  • GCC some extensions

    gcc(Gnu C Compiler)の拡張文法 [警告!] C/C++言語初心者はこのページを読まないでください。 このページではgcc独自のC/C++拡張文法について解説します。 これらの拡張文法が可能にする機構は確かに便利なのですが、 もちろんANSI規格に従っていないので、一般的には使うべきではありません。 C/C++言語文法を学び始めている初心者はこれらgcc拡張文法を 知るべきではありません。C/C++言語を正しく理解する上で大きな 支障となります。 C/C++言語を十分に熟知した者は、gccがこのようなこともすることを 「雑談」として知っておくと楽しいかもしれません。もちろん 実戦に使うべきではありませんが。しかし初心者が偶然に、これらの 機能を使ってうまくいく場合がありますので、そのような初心者を 見つけたら、それが標準規格ではないことを注意してください。 配列変数をコピー

    kosaki
    kosaki 2008/12/29
  • ホワット・ア・ワンダフル・ワールド gcc 独自拡張メモ

    ていうかね,GCC とか Kernel とかを深追いすると,簡単に人生を棒に振ることができそうで怖い. まぁ,それは良いとして. GCC の独自拡張に関しては,今までほとんど興味を持ってなかった (GCC の最適化をあんまり信用していない.ICC はバケモノという神話を信じているので.使ってないけど) んだけど,最近 GCC 独自拡張がアツい気がする (主に僕の中で) J - ■[gcc] builtin_expect おー,そんな拡張機能が・・・ GCC 便利過ぎる. あと、__builtin_expectは、PowerPCみたいな条件分岐に命令に直接分岐ヒント付けられるCPUじゃないとあんまり効果が無いような気がしたんですが、そこらへんは、誰か偉い人が。 PowerPC はそんなことができるのか・・・ SUGEE. ちょっとヤバいと思ったのが,typeof 拡張機能.いくら何でも,アレ

    kosaki
    kosaki 2008/12/29
  • memcpy 最適化 - kazuhoのメモ置き場

    バイト単位でコピーするアホなコードの方が、勝手にベクトル化される分、gcc 内蔵のヤツより最大3倍高速なんだってwww memcpy() compiled with vectorizing compilers All current compilers for linux should support SSE2 auto-vectorization with #include <string.h> void *(memcpy)(void *restrict b, const void *restrict a, size_t n){ char *s1 = b; const char *s2 = a; for(; 0<n; --n)*s1++ = *s2++; return b; }(中略) x86-64 gcc memcpy() (中略) Linking in a user-compiled

    memcpy 最適化 - kazuhoのメモ置き場
    kosaki
    kosaki 2008/06/16
    バイト単位でコピーするアホなコードの方が、勝手にベクトル化される分、gcc 内蔵のヤツより最大3倍高速
  • GCC Inline Assembler

    "asm"と"__asm__"は、基的には同じであるが、"__asm__"は使用している言語の予約語/関数等とぶつかる場合使用します。またはANSI C互換のコードをつくっている場合、"asm"キーワードが使用できなくなるので"__asm__"を使います。 /* keyword asm と同じ関数*/ function asm(void){ } /* asmが使用できないので__asm__を使用 */ function inline(){ __asm__("asm code"); }

    kosaki
    kosaki 2008/03/31
  • gccのfastcall関数呼び出しについて : no hacking, no life

    背景 最近、前職の友達や後輩、またその後輩の会社の方々などで「Linuxカーネル勉強会」なるものをはじめました。勉強会といっても読書会に近く、「Linuxカーネル解読室」というを使っての勉強会で、この前早速第1回があり、第1章の「プロセススケジューリング」について行いました。 みんなで議論などをして、書かれてることは大体理解できましたが、やはり前提知識がたくさん必要などの理由から不明な所が何点かあったので、その一つについて調べてみました。 (以降の説明はlinux kernel 2.6.15(x86)を元にしています。) わからなかった事 そのわからなかった事について説明します。 以下は、Linuxカーネルが行うコンテキススイッチの部分の核となるswitch_to というマクロです。 include/asm-i386/system.h #define switch_to(prev,n

  • Binary2.0 Conference 2006 発表資料 - memologue

    b2con 2006の発表資料を置きました。 "Hello, binary world!" (PDF, アニメなし) ご来場頂いた皆様、主催者の皆様、どうもありがとうございました。わたし自身もとても楽しめました。IRCの様子が会場でも見られたのはよかったと思います*1。他のスピーカーの皆さんの発表資料はこちら。 (追記) 会場でDan Kogaiさんに質問いただいた、__attribute__の括弧が二重なのは何故?という件なんですが、y-hamigakiさんが解説を書いてくださっています。ありがとうございます。なるほど。 *1:会場設営時に、shudoさんが機転をきかせてスクリーンを設置してくださったようです

    Binary2.0 Conference 2006 発表資料 - memologue
    kosaki
    kosaki 2006/12/18
    佐藤さんの資料
  • WhirlwindTutorialOnCreatingReallyTeensyElfExecutablesForLinux -

    WhirlwindTutorialOnCreatingReallyTeensyElfExecutablesForLinux - 目次 Linux で動く極小 ELF 実行ファイルをつくる怒涛のチュートリアル (あるいは "Size Is Everything") コメント 以下の文章の日語訳です: http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html gcc の info の日語は以下のページから拝借しました: http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_2.html#SEC13 Linux で動く極小 ELF 実行ファイルをつくる怒涛のチュートリアル (あるいは "Size Is Everything") She studied

    kosaki
    kosaki 2006/12/18
    ELF Golf入門
  • かそくそうち - __attribute__の括弧

    Binary 2.0カンファレンス2006 に動画とIRCで参加してきました。 http://0xcc.net/blog/archives/000149.html 動画をキャプチャしながら見ていたので、IRCとのタイムラグが結構ありました。 技術的にはブログなどで既知のものが多かったんですが、PS3 LinuxでのプレゼンにWiiリモコン使うなど、ネタとしては面白かったです。 最初の質問で「gccの__attribute__はなぜ括弧が二重になっているのか?」というのがあって、そのときには思いつかなかったのですが、休憩中にひらめいてIRCにちょっと書き込みました。 19:32 >hamigaki< 多分、gcc以外でマクロで代用するためですよ>括弧 19:32 >hamigaki< 二重でないと、コンマがかけない これだけだと、分からない人もいたと思うのでちょっと解説しておきます。 そもそ

    かそくそうち - __attribute__の括弧
    kosaki
    kosaki 2006/12/18
    gcc のattributeはなぜカッコが2重か
  • GCC 解読室 Wiki*

    Wikiaへ引越し Wikiaへ引っ越す事になりました。 新しくページを作る時はWikiaの方にお願いします。 ▲ ▼ FrontPage GCC のソースコードをひらメソッドで読んでいこうかと思っています. GCC は,最も歴史が古く,よってたかって世界中の スーパハカー に知恵と技術の限りを尽くして叩かれ続け,今では全てのフリーソフトウェアの礎石となっている,地球が宇宙に誇れるプログラム ((c) shinichiro_h さん & wo さん) です.ぜひあなたも一緒に,この難攻不落の要塞に挑んでみませんか ? 私 (管理人 あろは) は,とりあえず今の所,フロントエンドが何をやっているのか (GCC の内部データ表現形式である木構造,GENERICTree と GIMPLE Tree がどのようにして生成されるのか) を理解したいです. (RTL を含む,ターゲットア

    kosaki
    kosaki 2006/04/08
    gccをひらメソッドで読もう。というサイト
  • 更新履歴兼雑記 - 「GCC」検索結果

    https://peps.python.org/pep-0703/ Python の GIL 外す話。これすごく楽しい読みものでした。参照カウントのところが一番人気だと思うのですが、他のところも色々良い。こういう、「んーこういうことするとこういう問題が起きない?」と思ったら次の章くらいでそれが説明される、みたいな読みものは大変好きです 参照カウント: オブジェクトっていうのは作ったスレッドが解放するというのがほとんどなんだから、その場合はロックをいらなくする、他に渡ったら普通の参照カウントぽくする、という話。 Swift に 2018 年に導入された 話らしい。他のスレッドに渡された後で DECREF すると他スレッド用の参照カウントが負になりうるのだけど、その時に queue に入れるということをして、ややこしいので、なんかこれ無しですむ方法はないのかなぁ……と Immortalize

    更新履歴兼雑記 - 「GCC」検索結果
    kosaki
    kosaki 2006/04/08
    gccの内部構造解説など
  • gcc rtl

    日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。

    kosaki
    kosaki 2006/04/08
    gcc内部構造
  • プログラムはどう動くのか? 〜 ELFの黒魔術をかいまみる

    kosaki
    kosaki 2006/03/21
    鵜飼さんの初心者向け解説
  • フリーソフトウェア徹底活用講座 - GCC - 岸哲夫 - Interfaceコラム目次

    ◆移り気な情報工学 第62回  地震をきっかけにリアルタイム・システム再考 第61回  海を渡って卵を産む北京の「海亀族」 第60回  超遠距離通信とソフトウェア無線 第59回  IT先進国フィンランドの計画性 第58回  物理的に正しいITの環境対応 第57回  年金,e-チケットに見るディジタル時代の情報原 第56回  「着るコンピュータ」から「進化した布地」へ 第55回  技術を楽しむネットの文化 第54回  情報爆発2.0 第53回  プログラミングの現場感覚 第52回  GPS+LBS(Location Based Service)がおもしろい 第51回  技術の格差社会 第50回  フィンランドに見る,高齢化社会を支える技術 第49回  たかが技術倫理,されど技術倫理 第48回  若者の理科離れ,2007年問題から「浮遊」せよ 第47回  機械のためのWWW――Google

    kosaki
    kosaki 2006/03/20
    gcc のオプションの解説とか
  • g++ exception handling - memologue

    Code Project という有名サイトに、VC++の例外処理方法に関する記事があります (http://www.codeproject.com/cpp/Exceptionhandler.asp) が、そこにg++の例外処理方法を解説したコメントがありました。 ざっくりと次のような事を言っています(翻訳してるわけではないので詳しくは英文読んでください)。 g++は、VC++とはちょっと違うやりかたで例外処理を実装している。g++の場合、実際に例外がthrowされない限りは、try/throw/catchを使ったコードを書いてもランタイムのコストはかからない。 foo()がbar()を呼んでいて、bar()が例外を投げるとせよ。このとき、foo()はスタックに戻りアドレス*1を置いてからbar()を呼ぶ。この戻りアドレスを仮にXとする。 このときコンパイラは、 (X, 掃除コードのアドレス

    g++ exception handling - memologue
  • 或曰:2002年12月下旬

    今週のミス。 二度と繰り返さぬよう、記録に残しておく。 _ アライメント アセンブラで書いたテスト用データ。 .align 4 これを忘れたために、えらい目に…。 _ 浮動小数点レジスタを使い切る VU1 MicroMode プログラミングの話。 複数行列で頂点ブレンディングするコードを書いている時のこと。 何も考えずに、ループ開始前に行列をレジスタに読み出すコードを書いたら、 VCL に「レジスタ使い切った」と怒られる。 31 しかレジスタ無いのに、 行列まとめて読み出せば不足するが道理。 そもそも VU1 MicroMode では ローカルメモリからデータを読み出す積和演算 は Upper/Lower で同時実行できるから、 焦ってレジスタに置いておく利点はない。 そこで、 ループ中で行列を順に読み出しつつ計算を行うように書き直して対応。 それにしても VU0 MacroMode の

  • 【インフォシーク】Infoseek : 楽天が運営するポータルサイト

    日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。

  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer