我对c或c ++中的动态内存分配有疑问!
当我们想要计算出数组的大小时,我们使用sizeof
函数!
此外,如果我们想弄清楚数组中的元素数量,我们会这样做:
int a[20];
cout << sizeof(a) / sizeof(a[0]) << endl;
我想知道我们是否能算出动态分配的内存的数量和实际大小。 如果你告诉我如何,或者向我介绍参考,我将非常感激。
答案 0 :(得分:0)
在您的代码中,a[20]
被静态分配(在堆栈中)。使用的内存始终为20 * sizeof(int)
大小,并在函数末尾释放。
当您动态(在堆中)分配如下数组:int* a = malloc(20*sizeof(int))
时,您可以选择占用x个内存并根据需要填充它。因此,您有责任增加或减少数据结构所包含的元素数量。分配此内存量直到您释放它(free(a)
)。
无论如何,占用的内存的实际大小总是相同的(在我们的例子中是20*sizeof(int)
)。
查看有关堆栈/堆,静态/动态的信息:Stack, Static, and Heap in C++