gpt4 book ai didi

c++ - C++ 中的全局动态 Allcoated 变量

转载 作者:行者123 更新时间:2023-11-30 05:45:17 25 4
gpt4 key购买 nike

内存分为静态内存(静态变量/成员、全局变量)、栈、堆三种。

全局变量的定义是在任何函数之外定义的变量。

我想知道下面的代码,

#include<iostream>
int *test=new int[5]();
int main(){
return 0;
}

可以编译运行。但我想知道的是,该数组分配在哪里?是堆上的全局变量吗?

C++ Primer 说全局变量会在程序结束时被释放。我的问题是,即使它们在堆上也会发生这种情况吗?

最佳答案

指针 test 只是一些变量(指针类型)。它分配在内存的静态部分,但是它指向的(即 5 个 int 的内存)是分配在堆上的一些内存块。后者不会自动取消分配。用于存储指针 test 的内存(最常见的是 4 或 8 个字节,取决于机器)确实会在程序终止时标记为可用,但不是指针指向的内容。为了说服自己,试试这个:

#include <iostream>

struct Foo
{
Foo()
{
std::cout << "Foo()" << std::endl;
}
~Foo()
{
std::cout << "~Foo()" << std::endl;
}
};

Foo* pFoo = new Foo; // no automatic destructor call at exit, memory/resource leak

// destructor is called below, as Foo (and not Foo*) is now global
// (and not a pointer-to-Foo that has no destructor, thanks @Konrad Rudolph)
Foo foo;

int main()
{

}

关于c++ - C++ 中的全局动态 Allcoated 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29452332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com