static-initialization

    4

    1答えて

    Linux上でGCC(v.6.1.1)でコンパイルされた共有C++ライブラリの膨大なサイズの原因を分析します。 readelf -sW libfoo.soは、例えば、__static_initialization_and_destruction_0と呼ばれる特に大きな機能であることを私に伝えます: 000000000026c420 10272 FUNC LOCAL DEFAULT 12 __sta

    1

    1答えて

    私はデバイス上で動作するようにいくつかのCUDAコードを書いています。このコードでは、定数値のルックアップテーブルを2つ使用します。これらの最初は、256個の符号なしintの配列であり、私はとしてそれを宣言する: __constant__ uint16_t edgeTable[256]={ 0x000, 0x019, ... etc. }; そして、これは罰金

    3

    1答えて

    特定のインスタンスのコンストラクタ内で静的メンバー変数を初期化します。それは悪い考えですか? 状況は次のとおりです。このクラスのすべてのインスタンスが共有する静的メンバー変数があります。通常は、静的初期化子を使用します。しかし、私は、コンストラクタが呼び出されるまで静的オブジェクトを構築するのに必要な情報を持っていません。もちろん、コンストラクタが呼び出されるたびに新しいオブジェクトを作成したくな

    3

    1答えて

    dlopen()共有オブジェクトの場合、DLLを明示的に呼び出さずに実行するためのメカニズムがありますか?具体的には、呼び出し元のdlopen()が認識できないグローバル/静的なC++静的初期化コードですか?私は答えが "はい"であるべきであると確信していますが、どのような仕組みが起こるのか、どのようにそれを利用して任意のコードを実行するのかを覚えていません。

    1

    4答えて

    から静的に割り当てられた配列を作成するのは、私は2つの静的に割り当てられたグローバルな配列を持っているとしましょう: const int foo[] = {1, 2, 3}; const int bar[] = {4, 5, 6, 7}; 後、私はまた、静的に割り当てられているされた配列を宣言したいのですが、同じコンパイル単位にfooとbarの連結: const int foo_and_ba

    2

    1答えて

    pfultz2で示すように、ラムダ関数の静的初期化の回避策があります。 1つのステップは、ラムダ関数型へのポインタのnullptrを逆参照することを言います。スペックを通って行くと別の質問C/C++ nullptr dereference私はトラブル*fは未定義の動作であるかどうかを理解している template <typename T> typename std::remove_referenc

    2

    1答えて

    静的なconst要素を持つクラステンプレートを作成しました。その目的は、テンプレートの各特殊化がこの静的要素の独自のバージョン/値を持つことです。ここに私のサンプルコードです:コンパイルしない行については my int my char my int my char my int my char 、エラーメッセージを(GCC 4.4を使用して: template < typename T

    1

    2答えて

    function_sigの関数ポインタ配列が与えられているので、テンプレートパラメータを介してインデックスとなるテンプレート関数ポインタのセットに初期化したいと思います。これは可能ですか? など。 template<int I> void fn() { /* do something */ } typedef void(*function_sig)(); template<int ARR

    1

    1答えて

    静的ローカル変数はいつ初期化されますか? コンストラクタで例外がスローされた場合、そのオブジェクトは構築されていると見なされますか?デストラクタは呼ばれますか? 休閑コードを検討: #include <iostream> #include <exception> int x = 0; class A { public: A() { std::cout << 'a';

    0

    1答えて

    finding-c++-static-initialization-order-problems、 マクロをヘッダファイルに定義したいとします。 "check_fiasco.h"とし、このヘッダーファイルをウォーレンスティーブンスのアイデアのようにすべてのcppファイルの先頭に置きます。しかし、私は彼のコードをlinuxの下で試してみましたが、うまくいきません(コンパイルされますが、実行されるとク