public class testClass{
public static void main(String[] args){
System.out.println("Output is: "+retInt());
}
public static int retInt(){
return 1;
}
}
打印语句中的+retInt()值是否占用内存中的空间?如果是,那么在哪里--在栈中还是在java堆中?
我花了几个小时在一些好的C++书籍以及这里的堆栈溢出上寻找关于这个问题的讨论,虽然我已经看到了相当多关于“堆与堆栈”问题的问题,但我更具体地希望了解在创建类的对象成员时是否使用指针。
例如:
class A{
B c;
}
与
class A{
B*c;
}
在第一个示例中,这不是真正的“栈”分配,而是在“静态存储区域”中的分配,这是另一回事,所以我认为栈与堆的讨论不适用。
我不清楚的是这两种方法的优缺点。我读到的大多数代码似乎都在使用第二种选择,但为什么呢?
有可能我不知道这些技术的适当术语来正确地搜索这个网站,或者根本就没有关于这方面的问题。如果在其他地方确实有与此相关的答案,请务必让我知
如果我想在栈上已经创建的对象上放置新的对象:
struct s{
s() { std::cout << "C\n";}
~s() { std::cout << "D\n";}
};
int main() {
s s1[3];
for(int i=0; i< 3; ++i)
s* newS = new (&s1[i]) s();
}
我得到了:
C
C
C
C
C
C
D
D
D
所以我们没有为前3个对象获取析构函数,这安全吗?如果我们只是覆盖在堆/栈上分配的对
我想知道在动态创建2d数组时分配了多少大小 假设我在c++中动态创建一个一维数组,结果如下所示 int* p = new int[10]; 这意味着堆内存中有40字节,栈内存中有8字节(根据我的编译器),但我很困惑,如果我将2d数组设为(对于10*10 2d数组),将分配多少内存 int** p = new int*[10];
for(int i = 0; i < 10; i++) {
p[i] = new int[10];
} 我的堆栈和堆中将分配多少内存,它在堆栈中是80字节,在堆中是400字节或其他什么
如果我的Test类中有一个用户定义的默认构造函数,以及使用以下语句将完成哪些操作:
Test *test = new Test; //there is no () after new Test
首先,用户默认构造函数是否意味着“没有参数的构造函数”?例如:
class Test {
public:
Test() {
// do something here
}
}
那么,新的Test;意味着编译器将调用Test()类中的Test ()构造函数,并在其中执行操作,并在堆中为Test对象类分配内存?
那么*t
关于下面的代码,请告诉我栈和堆的区别
int main()
{
int arr[3];
int *a;
arr [5] = 6; // out of bound but it will not give error.
arr [3000] = 8 ; //SIGSEGV
a = malloc (sizeof (int));
a[4] = 6;
a[4000] = 8; //No error
}
我知道arr是一个静态数组,当我执行arr3000时,我正在访问其他进程的地址,这会给出SIGSEGV错误。但我不明白为什么a4000不给