3

グローバル(または静的ローカル)変数の次の定義が与えられます:

static const <type>* const ptr = {&var1, &var2, ...};

、初期化子リストのptrデータの両方が生成されたオブジェクトファイルの個別の読み取り専用セクションに配置されるという事実に依存できますか(つまり、.dataまたは非const変数を含む同様のセクションには配置されません)?

質問は、すべてのアーキテクチャ/プラットフォーム(少なくとも読み取り専用メモリが存在するもの)に共通するgcc c /c++コンパイラの動作にのみ関連しています。プラットフォーム、プロセッサ、OS、リンカー、起動ランタイム、ライブラリなどを意味するものではありません。

どうか、私が何をしようとしているのか聞かないでください。私は自分が何をしているのか知っています。私が提供した情報が答えに十分でない場合、問題はxxx固有のものと見なされる必要があり、一般的な答えは「いいえ」です。私はすでに質問を読みました-この主題が非常に近くに言及された答え:

型修飾子が格納場所に与える影響
読み取り専用メモリはCでどのように実装されていますか?
「const」は単に読み取り専用またはそれ以上の意味ですか?
コンパイラでconst変数をここに「書き込む」ことができるのはなぜですか?
GCC C ++(ARM)および構造体フィールド
memcpyへのconstポインターと、constデータへの宛先ポインター

しかし、私は確実で直接的な答えを見つけられませんでした。

4

1 に答える 1

2

stackoverflowスレッドによると、定数変数はCに格納されていますか?これは実装固有です。そして個人的には、すべてのGCCポートが同じように実装されているという考えに頼ることさえありません。そのため、たとえばAVRポートは「progmem」属性を導入しました。

だからあなたによると

私が何をしているのか聞かないでください。十分な情報がない場合、答えは「いいえ」です。

態度、私はここで言うでしょう:答えは「いいえ」ですそのようなものを保証するためのポータブルな方法はありません。実際、コンパイラとリンカに「読み取り専用セクション」のような場所に配置するように指示した場合でも。このセクションがRAMにある場合、誰がこのセクションへの書き込みアクセスを阻止しますか?

于 2012-12-05T08:07:50.033 に答える