2

如果您在函数中创建了一个原始类型的变量,如 int、char、float,您是在运行时还是在编译时创建了该变量?

如果您在函数内部创建了一个对象,您是在运行时还是在编译时创建了该对象?

如果您通过堆分配内存来创建对象,您是在运行时还是在编译时创建该对象?

什么是静态内存分配和动态内存分配?

4

3 回答 3

4

如果您在函数内创建了一个原始类型的变量,例如 int、char、float。您是在运行时还是在编译时创建了该变量?

您在运行时创建变量,该变量在函数执行时创建,并在函数完成时销毁。

如果您在函数内部创建了一个对象。您是在运行时还是在编译时创建了该对象?

和上面一样。

如果您通过堆分配内存来创建对象。您是在运行时还是在编译时创建了该对象?

如果你在堆上创建一个对象,你实际上是在运行时分配内存并返回一个指向它的指针。使用此指针,您可以读取/写入此内存。

静态内存,是只能在运行时读取的内存。

动态内存分配,是指在堆上分配对象并通过指向内存的指针来改变它们。

于 2012-04-22T09:12:11.837 回答
1

不,const int a=42;//a 是在编译时创建的,而不是在运行时创建的。

于 2014-01-07T03:52:03.190 回答
0

在 C++ 11 上

constexpr告诉编译器这是一个编译时常量,未分配,在需要时按值使用并进行优化,涉及constexpr和/或const值的表达式在编译时计算。编译器可以这样做,但我认为甚至不需要constexpr分配大对象。

const如果没有使用指针,可以在需要时使用 value 来优化在编译时分配的

函数内部的全局变量和静态变量在编译时分配

函数内的变量通常被放入堆栈内存,与传递参数相同,但它们可以驻留在内存中(我猜编译器是免费的)

new用运算符(或旧 C 风格)分配的东西malloc将驻留在堆上,直到被释放

于 2020-01-22T17:48:25.537 回答