动态分配内存存储清晰度

时间:2015-10-12 17:37:44

标签: c++ memory-management new-operator heap-memory

当动态分配内存时,它是否存储在堆上,无论它在何处被声明?例如,如果在main()

中声明了以下代码行
  

int * p = new int [100000];

将从堆或堆栈中分配内存吗?

如果在全局范围内进行相同的声明,则将从堆中获取内存。但我读到动态分配的内存存储在堆上,局部变量存储在堆栈中。那么当从main内部执行上面的代码行,这使得它成为局部变量时,是从堆栈还是堆中获取内存?

2 个答案:

答案 0 :(得分:1)

我以为我会回答这个问题:

很简单:

  • 如果使用“new”,将从堆中分配内存。

  • “p”是局部变量。它是一个指针,它存储在堆栈中。

  • 它指出的10,000英镑由“新”分配;它们存储在堆中。

答案 1 :(得分:1)

clear
set obs 100
local vars j_r_hp j_p_hp j_m_hp p_c_hp p_r_hp p_p_hp p_m_hp
foreach var of local vars   {
    gen `var'=rnormal()
}

forval ii=1/`: word count `vars''   {
    forval jj=1/`: word count `vars''   {
        if `ii'<`jj'    continue
        corr `: word `ii' of `vars'' `: word `jj' of `vars''
    }
}

将始终从分配内存(正确的术语是动态存储)。这意味着使用int* p = new int[100000]; new

只有指针变量本身才能获得new[]之外的静态存储分配,分别是本地存储。