我现在想知道这些指令是如何分配内存的。
例如,如果我得到的代码是:
x = new int[5];
y = new int[5];
如果这些被分配了,那么它在RAM中的实际外观是什么?是为每个变量保留整个块,还是为2个变量共享块(内存页或32位大小为4KB的内存页)?
我在任何手册中都找不到我的问题的答案。感谢你所有的回复。
我在维基百科上发现:页面的内部碎片很少需要使用精确的页面数量。因此,最后一页可能只会部分填满,从而浪费一定数量的内存。更大的页面大小显然会以这种方式增加浪费内存的可能性,因为更多可能未使用的内存部分被加载到主内存中。较小的页面大小可确保与分配所需的实际内存量更接近。例如
我有一些代码可以检查大PDF (20,000+页面)中的每个页面,如果该页面包含特定的字符串,那么它会将该页面导入到另一个PDF中。
由于发生的次数多,它被导入的PDF几乎与源PDF一样大--当它变得太大时,它会发出炸弹,除了下面的例外:
Exception in thread "main" java.lang.OutofMemoryError: Java heap space
at java.utils.Arrays.copyOf (Unknown Source)
at java.io.ByteArrayOutputStream.toByteArray (Unknown So
我想了解为什么动态分配的数据被多次调用,比直接在代码上指定的内存或使用单个malloc调用分配的内存要多。
示例
例如,我用C语言编写了以下两个代码:
test1.c:使用malloc分配int x
int main (void)
{
int *x;
int i, n=1048576; //n=1024*1024;
printf("size = %lu\n", n* sizeof(int));
for(i=0; i<n; i++)
{
x = malloc(sizeof(int));
*x=i;