1

次のコードでは:

char *p = "Linux";

「Linux」のメモリはスタックにありますか、それともプログラムの読み取り専用セグメントですか?

記事12興味深いCインタビューの質問と回答の質問9を参照してください。

ありがとう。

4

2 に答える 2

3

実装は、必要な場所に自由に保存できます。これは定数であるため、読み取り専用メモリに含めることができますが、必須ではありません。

私のCプログラミングのインストラクターは、常にスタック上でそれを言っているので、疑問があります。

彼はおそらくポインタを意味します。検討:

char *p = "Linux";
p = "Rules";

2行目では、「Linux」を指すものから「Rules」を指すものに変更されました。変更されたばかりのものはスタック上にあります。

于 2012-11-27T00:38:53.363 に答える
0

リンクが示すように、動的に割り当てられたメモリではなく、コード自体が存在するメモリに格納されます。つまり、読み取り専用セクションです。したがって、それを変更しようとすると、セグメンテーション違反が発生します。

于 2012-11-27T00:44:07.393 に答える