0

如果在匿名命名空间中声明变量,会使用什么内存?喜欢:

namespace
{
   Class *pclass;

   void fSet()
   {
       pclass = new Class;

       pclass->func();

   }

   void fDes()
   {
      delete pclass;
      pclass = NULL;
   }

}

这安全吗?

4

3 回答 3

2

命名空间对使用的内存没有影响:指向的指针Class位于全局(静态)内存区域,而它指向的对象位于动态(堆)内存区域。这与使用命名空间一样安全。

于 2013-09-19T02:59:05.740 回答
1

我不太确定,但我认为它在代码内存或程序数据部分的某个地方(也在程序的二进制文件中提供)。它就像全局变量和静态变量。命名空间仅用于组织代码以避免名称冲突。

我认为这取决于编译器将它们放置在代码内存中的位置(以及应用程序二进制文件中)。但它们既不会在堆栈中,也不会在堆中。

pClass 可以指向的内存地址可以在堆栈、堆或代码内存中。

当谈到安全漏洞时,驻留在代码内存中的变量比堆栈和堆中的变量更容易被黑客攻击,因为它们甚至可以在运行程序之前很容易地定位在内存中。

当谈到组织代码的安全性时,我认为如果其他源文件使用相同的“pClass”名称仍然存在名称冲突,因为编译器不知道将使用哪一个。但我也不确定这一点。我不太了解命名空间的行为。这只是一个猜测。

于 2013-09-19T03:01:39.703 回答
0

这是安全的。C++ 标准不赞成使用文件静态变量,而是建议使用未命名的命名空间。

于 2013-09-19T03:50:10.560 回答