我刚刚收到一个关于c++类成员的存储的问题。
例如,我有一个这样的类:
class MyClass1{
int a;
int b[4];
int c;
}
在主要职能方面:
int main(){
MyClass1 class1;
MyClass1* class_ptr1= new MyClass1();
}
那么成员a,b,c是如何存储的呢?对于class1,我认为所有成员都分配了堆栈中的一个空格,甚至是数组b。
那class_ptr1呢?显然,它是动态分配的,成员也是动态分配的,即使它们不是指针。
非常感谢。
非常感谢你的回复。现在我了解到,一旦类被
当RAM不足时,堆上动态分配的变量可以利用磁盘上的交换空间(尽管会导致性能下降)。我的问题是内存中的堆栈是否也可以利用交换空间。
例如,下面的程序在堆栈上放置一个大数组。(当然,通常我们会动态地在堆上分配大变量。)如果该程序在运行时崩溃,我可以通过添加交换空间使其成功运行吗?
int main()
{
int myArray[1000000];
return 0;
}
可能重复:
这是常量大小为4的简单数组的定义,它存储在堆栈内存中:
int array[4];
现在,如果我想在堆栈中声明动态大小的数组,似乎应该编写以下代码:
int n;
cin >> n;
int array[n];
但是,正如我们所知道的,这在C++中是不允许的,我们可以编写这个,它将在动态内存(即堆)中创建数组:
int n;
cin >> n;
int *array = new int[n];
但是这要慢得多,而且(因为使用了新的运算符),需要在我们完成数组的工作之后调用delete []操作符。
所以我的问题是:
为什么C++不允许在堆栈内存中创建动
我创建一个名为StackOfBook的堆栈类。我需要两个堆栈,所以我在我的主类上创建了这个:
StackOfBook stack1 = new StackOfBook();
while (true) {
long number = sc.nextLong();
if (number == -1) {
break;
}
stack1.push(number);
}
StackOfBook stack2 = new StackOfBook(stack1.getTop());
这是我的堆栈类:
private int top = 0;
privat