读书人

以下两种情况:哪个占的空间更大些?该

发布时间: 2012-05-27 05:42:30 作者: rapoo

以下两种情况:哪个占的空间更大些?
以下两种情况:

(1)new一个10个整型的数组

(2)分10次new一个整型的变量

哪个占的空间更大些?
为什么?


这是一道面试题,如果没有可讨论的必要性的话,请勿拍砖,还是请大家各抒己见

[解决办法]
第二次大。
crt 和api都会记录 内存分配情况的。
[解决办法]

探讨

第二次大。
crt 和api都会记录 内存分配情况的。

[解决办法]
第二个。
而且new(int)申请到的实际内存可能会比sizeof(int)更大一点,以及在OS层面也会记录储存堆分配情况的
[解决办法]
探讨
以下两种情况:

(1)new一个10个整型的数组

(2)分10次new一个整型的变量

哪个占的空间更大些?
为什么?


这是一道面试题,如果没有可讨论的必要性的话,请勿拍砖,还是请大家各抒己见

[解决办法]
一般没人用第二种方法吧
[解决办法]
第二次大。第二个还会造成碎片
[解决办法]
从FreeBSD 8.1-RELEASE的测试结果看起来
malloc采用了按size分区管理的策略。在这种情况下空间占用差别不大,也不存在碎片的问题.
一般情况下,建议应该根据程序需要使用合理的方法,不要太多考虑malloc的内存占用和效率问题,因为在大多数情况下,malloc的时间效率和空间效率都是不错的
C/C++ code
#include <stdio.h>#include <stdlib.h>intmain(int argc, char *argv[]){        int i;        int *ptr[10], *next;        for (i = 0; i < 10; i++) {                ptr[i] = malloc(sizeof(int));                printf("%p\n", ptr[i]);        }        next = malloc(sizeof(int));        printf("%p\n", next);        printf("%d\n", (int)(next - ptr[0]));        for (i = 0; i < 10; i++) {                free(ptr[i]);        }        printf("\n");        ptr[0] = malloc(sizeof(int) * 10);        next = malloc(sizeof(int));        printf("%p\n", ptr[0]);        printf("%p\n", next);        printf("%d\n", (int)(next - ptr[0]));        return 0;}$ ./malloc_demo0x282010880x2820108c0x282010900x282010940x282010980x2820109c0x282010a00x282010a40x282010a80x282010ac0x282010b0100x282030400x28201088-2030
[解决办法]
因为内存是分页的,每页有固定的大小,就像一张纸,你写了90%的字,现在又有一篇相同的文章要写,只能写在新的一张,这个是cpu调度的,根据最小或者最大最优之类的,这样就会有10%的用不了。极限的如果一页纸只剩一个字的空间,那么这个字就是碎片。

读书人网 >C++

热点推荐