問題タブ [code-size]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2060 参照

c++ - コンパイラ最適化の「定数伝播」とはどういう意味ですか?

ScottMeyersによるEffectiveC++から:

データが格納されている場所に関係なく、肥大化の観点からの重要な結果は、SquareMatrixのメンバー関数の多く(おそらくすべて)が、同じタイプを保持する他のすべてのマトリックスと共有される基本クラスバージョンへの単純なインライン呼び出しである可能性があることです。サイズに関係なく、データ。同時に、異なるサイズのSquareMatrixオブジェクトは異なるタイプであるため、たとえば、SquareMatrix <double、5>オブジェクトとSquareMatrix <double、1 0>オブジェクトは、SquareMatrixBase <double>で同じメンバー関数を使用しますが、 SquareMatrix <double、5>オブジェクトをSquareMatrix <double、10>を期待する関数に渡します。いいですね

いいですね、はい、でも無料ではありません。マトリックスサイズが組み込まれたinvertのバージョンは、サイズが関数パラメーターとして渡されるか、オブジェクトに格納される共有バージョンよりも優れたコードを生成する可能性があります。たとえば、サイズ固有のバージョンでは、サイズはコンパイル時の定数であるため、即値オペランドとして生成された命令に折りたたまれるなど、定数の伝播などの最適化に適しています。サイズに依存しないバージョンでは、これを行うことはできません。

上記の最後の段落の説明では、「したがって、定数オペランドとして生成された命令に折りたたまれることを含む、定数伝搬などの最適化に適格である」と述べられています。このステートメントはどういう意味ですか?説明をお願いします。

ありがとう!

0 投票する
17 に答える
15211 参照

c++ - C++関数のサイズの取得

C ++プログラムで関数のサイズを見つけようとしているので、この質問を読んでいました。プラットフォーム固有の方法がある可能性があることを示唆しています。私のターゲットプラットフォームはWindowsです

私が現在頭の中で持っている方法は次のとおりです
。1。関数へのポインターを取得します。2。3
のマシンコード値に達するまでポインター(&カウンター)をインクリメントしret
ます。カウンターは関数のサイズになりますか?

編集1:「サイズ」の意味を明確にするために、関数を構成するバイト数(マシンコード)を意味します。
Edit2:なぜ、またはこれで何をするつもりなのかを尋ねるコメントがいくつかあります。正直な答えは、私には意図がなく、関数のコンパイル前の長さを知ることの利点を実際に理解することはできません。(確かにいくつかありますが)

これは私には有効な方法のようですが、これは機能しますか?

0 投票する
2 に答える
2489 参照

iphone - iPhoneアプリのコードサイズを小さくするにはどうすればよいですか?

私のiPhoneアプリは本番環境に移行する準備ができており、できるだけ多くのデータを詰め込みたいと思っています。アプリケーション用に生成された.appファイルを調べてみると、コンパイルされたコードであると思われる<executablename>という名前のファイルが表示されます。これは約2.5メガバイトで、アプリに含めているものとしては大きいようです。実行可能ファイルに不要なアイテムが含まれていないことを確認するには、どのような種類のチェックを行う必要がありますか?

0 投票する
11 に答える
26007 参照

c++ - 2 GBを超えるコードをコンパイルするときのGCCコンパイルエラーを修正するにはどうすればよいですか?

合計で約2.8GBのオブジェクトコードを含む膨大な数の関数があります(残念ながら、科学計算を回避する方法はありません...)

それらをリンクしようとすると、(予期される)relocation truncated to fit: R_X86_64_32Sエラーが発生します。これは、コンパイラフラグを指定することで回避したいと考えていました-mcmodel=medium。私が制御できることに加えてリンクされているすべてのライブラリは、-fpicフラグを使用してコンパイルされます。

それでもエラーは解決せず、リンク先の一部のライブラリはPICでコンパイルされていないと思います。

エラーは次のとおりです。

そして、私がリンクしているシステムライブラリ:

問題を探す手がかりはありますか?

編集:

まず第一に、議論をありがとう...

少し明確にするために、私は次のような何百もの関数(それぞれが別々のオブジェクトファイルでサイズが約1 MB)を持っています:

オブジェクトsは比較的小さく、必要な定数x14、x15、...、ds0、...などを保持tiしますが、外部ライブラリからdoubleを返すだけです。ご覧のとおり、csc[]は事前に計算された値のマップであり、次の形式の個別のオブジェクトファイル(それぞれ約1 MBのサイズで数百)でも評価されます。

それについてです。最後のステップは、それらすべてを呼び出しfunc[i]て結果を合計することです。

これがかなり特殊で珍しいケースであるという事実に関して:はい、そうです。これは、素粒子物理学のために高精度の計算を行おうとするときに人々が対処しなければならないことです。

EDIT2:

また、x12、x13などは実際には定数ではないことも付け加えておきます。それらは特定の値に設定され、それらすべての関数が実行されて結果が返され、次にx12、x13などの新しいセットが選択されて次の値が生成されます。そして、これは105から106回行わなければなりませ...

EDIT3:

これまでの提案と議論に感謝します...正直なところ、これを正確に行う方法がわからないので、コード生成時にループをロールアップしようとしますが、これが最善の策です。

ところで、私は「これは科学計算であり、最適化する方法はありません」の背後に隠れようとはしませんでした。
このコードの基礎は、私が実際にアクセスできない「ブラックボックス」から出てきたものであり、さらに、単純な例ですべてがうまく機能し、主に実際に起こっていることに圧倒されていると感じていますワールドアプリケーション...

EDIT4:

cscそこで、数式処理システム(Mathematica )で式を簡略化することで、定義のコードサイズを約4分の1に減らすことができました。コードを生成する前に他のトリックを適用することで(この部分を約100 MBに減らす)、もう1桁程度減らす方法もわかりました。このアイデアが機能することを願っています。

今あなたの答えに関連しています:

funcCASがあまり役に立たないsでループを再びロールバックしようとしていますが、すでにいくつかのアイデアがあります。たとえば、のような変数で式を並べ替え、 Pythonでsをx12, x13,...解析し、cscそれらを相互に関連付けるテーブルを生成します。そうすれば、少なくともこれらの部分をループとして生成できます。これがこれまでのところ最良の解決策であるように思われるので、私はこれを最良の答えとしてマークします。

ただし、VJoの功績も認めたいと思います。GCC 4.6は確かにはるかにうまく機能し、より小さなコードを生成し、より高速です。大きなモデルを使用すると、コードをそのまま使用できます。したがって、技術的にはこれが正解ですが、概念全体を変更する方がはるかに優れたアプローチです。

あなたの提案と助けをありがとうございました。興味のある方は、準備ができ次第最終結果を掲載します。

備考:

他のいくつかの答えに対するいくつかの注意:私が実行しようとしているコードは、単純な関数/アルゴリズムの拡張と愚かな不必要な展開に由来するものではありません。実際に起こることは、私たちが始めたものはかなり複雑な数学的オブジェクトであり、それらを数値的に計算可能な形式にすることでこれらの式が生成されるということです。問題は、実際には基礎となる物理理論にあります。中間式の複雑さは階乗的にスケーリングしますが、これはよく知られていますが、これらすべてを物理的に測定可能なもの(観察可能なもの)に組み合わせると、式の基礎を形成する非常に小さな関数のほんの一握りに要約されます。(この点に関しては、一般的で唯一利用可能な仮説に関しては間違いなく「間違った」ものがありますこれは「摂動論」と呼ばれます)私たちは、この仮説を別のレベルに引き上げようとします。これは、もはや分析的に実行可能ではなく、必要な関数の基礎がわからない場合です。ですから、このようにブルートフォースを試みます。最善の方法ではありませんが、うまくいけば、最終的に手元にある物理学の理解に役立つ方法です...

最終編集:

すべての提案のおかげで、Mathematicaを使用しfunc、トップアンサーの線に沿ってsのコードジェネレーターを変更することで、コードサイズを大幅に削減することができました:)

Mathematicaで関数を単純化し、csc92MBに減らしました。これは既約部分です。最初の試みは永遠にかかりましたが、いくつかの最適化の後、これは現在、単一のCPUで約10分で実行されます。

sへの影響funcは劇的でした。それらのコード全体のサイズは約9MBに減少したため、コードの合計は100MBの範囲になりました。これで、最適化をオンにするのが理にかなっており、実行は非常に高速です。

繰り返しになりますが、皆さんの提案に感謝します。私はたくさんのことを学びました。

0 投票する
3 に答える
300 参照

c++ - Qt アプリのサイズを回避する方法

ネットワーク ライブラリと GUI ライブラリを含む Qt アプリは約 10MB になります。つまり、コードなしです。

私のようにインターネットに接続している人にとって、これは少し不便です。特に、めったに使用されないプログラムの場合 (つまり、一度使用してから放置する)。

LZMA および LZMA2 圧縮を使用して exe ファイルを圧縮しようとしましたが、何もしませんでした。

コード自体を小さくしたいのですが、方法はありますか?どのくらいサイズダウンできますか?少なくともネットワーク ライブラリに関しては。

PS: UPX やそのようなアプリケーションは使いたくありません。

0 投票する
4 に答える
781 参照

c++ - インライン関数の使用は、関数本体をコードに直接記述するのと同じくらい高速ですか?

Foo1()とのFoo2()うち、どちらがより速く完了しますか?

0 投票する
2 に答える
283 参照

c - C18: 未使用のライブラリ関数は EPROM のスペースを消費しますか?

Library.h

main.c

多くの関数定義を含むライブラリ ファイルがあります。未使用のライブラリ関数により、生成されるマシン コードのサイズは増加しますか? それとも、コンパイラは未使用の関数を無視してコードを最適化しますか?

IDE: MPLAB 8.43
コンパイラ: MCC18 3.34
PIC: 18F2550

0 投票する
4 に答える
355 参照

c++ - 論理的にオプションの場合、最後の`return`ステートメントを`else {return ...} `でカプセル化する必要がありますか?

速度、パフォーマンス、マシンコードサイズの点で優れているフォーマットはどれですか?

最後returnはカプセル化されています:

最後returnはカプセル化されていません:

0 投票する
3 に答える
4413 参照

c++ - コードサイズを測定する方法は?

特定の機能や最適化について説明する場合、コードサイズがよく言及されます。

基本的な概念、つまり、マシンコードにコンパイルされたコードのコレクションは、Xバイトのマシンコード(および静的データ)になるということは確かに理解していますが、最近、実際にコードサイズを測定する方法が非常にわからないことに気付きました。与えられたバイナリの。

では、コードサイズをどのように測定しますか?

結果のバイナリ(「実行可能」、)の大きさを確認するだけ.exeですか?dumpbin.exe詳細な結果を得るには、または特定のリンカーフラグなどのツールが必要ですか?