我花了几个小时在一些好的C++书籍以及这里的堆栈溢出上寻找关于这个问题的讨论,虽然我已经看到了相当多关于“堆与堆栈”问题的问题,但我更具体地希望了解在创建类的对象成员时是否使用指针。
例如:
class A{
B c;
}
与
class A{
B*c;
}
在第一个示例中,这不是真正的“栈”分配,而是在“静态存储区域”中的分配,这是另一回事,所以我认为栈与堆的讨论不适用。
我不清楚的是这两种方法的优缺点。我读到的大多数代码似乎都在使用第二种选择,但为什么呢?
有可能我不知道这些技术的适当术语来正确地搜索这个网站,或者根本就没有关于这方面的问题。如果在其他地方确实有与此相关的答案,请务必让我知
public class testClass{
public static void main(String[] args){
System.out.println("Output is: "+retInt());
}
public static int retInt(){
return 1;
}
}
打印语句中的+retInt()值是否占用内存中的空间?如果是,那么在哪里--在栈中还是在java堆中?
我想知道在动态创建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字节或其他什么
如果我想在栈上已经创建的对象上放置新的对象:
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个对象获取析构函数,这安全吗?如果我们只是覆盖在堆/栈上分配的对
所以我有个学术问题。我能够用蛮力的方法解决这个问题,但我相信它在LINQ中是可以更优雅地解决的--然而,我无法找到这样做的方法。解决方案可以是C#或VB,是LINQ本身给我带来了麻烦。
我的目标如下:
public class Foo
{
public int FooId {get; set; }
public int Bar {get; set; }
/// <summary>
/// Contains list of FooId
/// </summary>
public int[] Stackability
}
如果我的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不给
假设我有以下代码:
float[] test = new float[10];
for(int i = 0; i < 10; i++)
{
test[i] = i + 1.0f;
}
我重新分配了一个新的浮点数来测试数组,如下所示:
test = new float[10];
通过Console.WriteLine调试后,显示重新分配的test的值为0。这是否意味着test是对新创建的浮点数组的引用,还是前一个数组正在被清除并重新创建?
我读过一些关于堆和栈的文章,但这并没有解决我的困惑。
我很好奇Windows和Linux是如何使用C++程序进行内存管理的。
产生这种好奇心的原因是,我刚刚用C++编写了3个非常简单的程序,可以在Linux和Windows之间移植。代码是完全相同的。硬件也是。但结果却大相径庭!两个测试都重复10次,然后计算算术平均值。
我已经在静态整数数组、类向量和堆栈(带有指针)上测试了顺序插入。插入的总次数为10^6。
Windows XP SP2 x86结果:静态整数数组: 56毫秒类向量: 686毫秒堆栈(带指针):2193毫秒
Slackware 11 x86结果:静态整数数组: 100毫秒类向量: 476毫秒堆栈(带指针):505毫秒
Windows