変数が匿名名前空間で宣言されている場合、どのメモリが使用されますか? お気に入り:
namespace
{
Class *pclass;
void fSet()
{
pclass = new Class;
pclass->func();
}
void fDes()
{
delete pclass;
pclass = NULL;
}
}
そして、これは安全ですか?
変数が匿名名前空間で宣言されている場合、どのメモリが使用されますか? お気に入り:
namespace
{
Class *pclass;
void fSet()
{
pclass = new Class;
pclass->func();
}
void fDes()
{
delete pclass;
pclass = NULL;
}
}
そして、これは安全ですか?
名前空間は、使用されるメモリに影響を与えません。ポインタClass
はグローバル (静的) メモリ領域にあり、それが指すオブジェクトは動的 (ヒープ) メモリ領域にあります。これは、名前付きの名前空間を使用するのと同じくらい安全です。
よくわかりませんが、コードメモリまたはプログラムのデータセクションのどこかにあると思います(プログラムのバイナリファイルでも提供されます)。グローバル変数と静的変数のようなものです。名前空間は、名前の競合を避けるためにコードを整理するためのものです。
コードメモリ(およびアプリバイナリファイル)のどこに配置されるかは、コンパイラに依存すると思います。しかし、それらはスタックにもヒープにもありません。
pClass が指すことができるメモリ アドレスは、スタック、ヒープ、またはコード メモリ内にあります。
セキュリティ上の脆弱性に関して言えば、コード メモリに存在する変数は、プログラムを実行する前でもメモリ内で簡単に見つけることができるため、スタックやヒープよりも簡単にハッキングできます。
コードを編成する際の安全性に関して言えば、他のソースファイルが同じ「pClass」名を使用している場合、コンパイラーはどちらが使用されるかの手がかりがないため、名前の衝突がまだあると思います。しかし、これについてもよくわかりません。名前空間の動作はよくわかりません。それはただの推測です。
安全。C++ 標準では、ファイル スタティックの使用を推奨せず、代わりに名前のない名前空間を使用することを推奨しています。