我花了几个小时在一些好的C++书籍以及这里的堆栈溢出上寻找关于这个问题的讨论,虽然我已经看到了相当多关于“堆与堆栈”问题的问题,但我更具体地希望了解在创建类的对象成员时是否使用指针。
例如:
class A{
B c;
}
与
class A{
B*c;
}
在第一个示例中,这不是真正的“栈”分配,而是在“静态存储区域”中的分配,这是另一回事,所以我认为栈与堆的讨论不适用。
我不清楚的是这两种方法的优缺点。我读到的大多数代码似乎都在使用第二种选择,但为什么呢?
有可能我不知道这些技术的适当术语来正确地搜索这个网站,或者根本就没有关于这方面的问题。如果在其他地方确实有与此相关的答案,请务必让我知
我很好奇Windows和Linux是如何使用C++程序进行内存管理的。
产生这种好奇心的原因是,我刚刚用C++编写了3个非常简单的程序,可以在Linux和Windows之间移植。代码是完全相同的。硬件也是。但结果却大相径庭!两个测试都重复10次,然后计算算术平均值。
我已经在静态整数数组、类向量和堆栈(带有指针)上测试了顺序插入。插入的总次数为10^6。
Windows XP SP2 x86结果:静态整数数组: 56毫秒类向量: 686毫秒堆栈(带指针):2193毫秒
Slackware 11 x86结果:静态整数数组: 100毫秒类向量: 476毫秒堆栈(带指针):505毫秒
Windows
所以我有个学术问题。我能够用蛮力的方法解决这个问题,但我相信它在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
}
我想知道在动态创建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字节或其他什么
我和C++中的C++操作符搞混了。我知道它的目的是释放动态内存(堆)。但是我尝试了下面的代码,发现了一些问题:
int *dynArrOne = new int[10];
int *dynArrTwo = nullptr;
因此,它将从堆栈中的指针dynArrOne在堆中创建10个新地址。然后我写道:
int *dynArrOne = new int[10];
int *dynArrTwo = dynArrOne;
因此,dynArrTwo和dynArrOne现在指向堆中的相同地址。如果我编写:delete [] dynArrOne;,堆中的内存将被释放。问题是,我无法通过dynArrTwo: