以下两种情况:哪个占的空间更大些?
以下两种情况:
(1)new一个10个整型的数组
(2)分10次new一个整型的变量
哪个占的空间更大些?
为什么?
这是一道面试题,如果没有可讨论的必要性的话,请勿拍砖,还是请大家各抒己见
[解决办法]
第二次大。
crt 和api都会记录 内存分配情况的。
[解决办法]
[解决办法]
第二个。
而且new(int)申请到的实际内存可能会比sizeof(int)更大一点,以及在OS层面也会记录储存堆分配情况的
[解决办法]
[解决办法]
一般没人用第二种方法吧
[解决办法]
第二次大。第二个还会造成碎片
[解决办法]
从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%的用不了。极限的如果一页纸只剩一个字的空间,那么这个字就是碎片。