システムプログラミング会のまとめ
Linkerでは文字列をひとまとめにすることができる。デバッグ情報なども削減圧縮できる。ただし計算量が多い。のでこれを切るとさらに速くなる。#spkai
2016-07-02 14:12:00ICF: 名前でなくて内容でマージする。inline 関数とかを。テンプレートから吐かれた名前から違うコードを一つにできるらしい。 #spkai
2016-07-02 14:12:47ICFという同じようなコードをマージしてしまうリンカの最適化機能があるらしい。これもコード全部をグループ化してマージできるかどうか探索するので計算量が多い。それでもgoldと同じぐらい。 #spkai
2016-07-02 14:15:02ICFの話。呼び出してる関数がぱっと見違ってもリロケーションされて同じものになるなら呼び出す側も同じものとして扱ってよい。それを考えるとグラフの同一性問題に帰着する #spkai
2016-07-02 14:15:18#spkai 気になるな。 現代的なリンカーってよくわからないんだけど、LTOするためにはオブジェクト内の中間言語に対してリンクしたうえで中間言語を最適化したバイナリを吐くようなコンパイラ後段と連携する必要があって、すごい大変そうな気がする。
2016-07-02 14:15:41「Section garbage collectionが有効でないかぎり」ここ、流していいんだろうか。 #spkai
2016-07-02 14:16:04ライブラリの話に入ってきた。.aファイルはオブジェクトファイルのtarみたいもので、未定義のシンボルが見つかったら、対象のオブジェクトファイルを取り出す。 #spkai
2016-07-02 14:17:47「リンカがコマンドラインに渡された順番にarファイルを処理してシンボルを解決する…けど無茶苦茶なセマンティクスで…」 #spkai
2016-07-02 14:18:36Unixの場合、コマンドラインに渡す順序でしかシンボル解決をしないので、最初にライブラリを指定して後でオブジェクト渡すと、後のオブジェクトで見つかった未定義シンボルが解決されなかったり、相互参照しているものがあると解決できなかったりする。 #spkai
2016-07-02 14:18:59LLDでは渡されたオブジェクトとアーカイブファイルのヘッダを順次読んでシンボルとファイルの対応テーブルを構成する。だから後から戻って探せるとのこと。 #spkai
2016-07-02 14:21:45