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

时间:2013-09-19 02:54:46

标签: c++

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

namespace
{
   Class *pclass;

   void fSet()
   {
       pclass = new Class;

       pclass->func();

   }

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

}

这样安全吗?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

pClass可以指向的内存地址可以位于堆栈,堆或代码内存中。

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

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

答案 2 :(得分:0)

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