首页 > 试题广场 >

请阅读下面代码片段并且回答问题: #define SIZE;

[单选题]
请阅读下面代码片段并且回答问题:
#define SIZE_20M (20*1024*1024)
void func_a()
{
    char *temp = malloc(SIZE_20M)
    return;
}
void func_b()
{
    char temp[SIZE_20M];
    //...do something using temp
    return;
}

关于这段代码,下列说法正确的是
  • func_a 获得临时内存的方式效率通常更高。
  • func_b 使用了太多的栈,程序可能会在运行时候崩溃。
  • func_b 存在内存泄露
  • func_a 和func_b 分配的内存会自动初始化0
推荐
答案B
A   func_a()动态分配的数据位于堆区,func_b()的temp位于栈区,栈区的执行效率高于堆区,故func_b()效率高
C  func_b()中没有动态分配的内存,不存在泄露问题
D  都不会自动初始化为0,只有全局变量或者static变量会初始化为0
B  栈的空间一般为2M,分配太多栈空间程序肯定会崩溃
编辑于 2016-05-20 10:17:02 回复(2)

//A.栈区效率比堆区高,malloc分配的空间在堆区,临时变量分配在栈区。

区别是:栈区由电脑自己清除(用完自动删),堆区需要程序员清除,或者程序结束后由系统清除

 B.栈一般能放2M大小

 C.func_a会发生内存泄漏(使用动态内存分配,使用完未删除就会造成泄漏。或者是如果没有任何一个指针指向那块动态内存,那它就泄漏了)

 D.堆区和栈区都不会自动初始化,自动初始化会在未赋值的静态/全局区。

发表于 2016-10-10 19:05:30 回复(3)
感谢讨论区,以下为加强理解和记忆:
1.栈区的效率比堆区高,malloc分配内存在堆区,临时变量保存在栈区
2.栈区的内存一般为2M
3.内存泄漏通常发生在动态分配时,使用结束未回收导致泄漏。栈区通常为电脑自己回收,而堆区通常由程序员手动删除或者程序运行结束,系统回收。
4.堆区和栈区均不会初始化,只有保存在全局/静态区的变量未赋值时才会自动初始化为0
发表于 2022-04-20 12:50:02 回复(0)
malloc(大小)   分配到堆区
void * malloc(usingned int size);单位是(byte)字节数   其作用是在内容的动态存储区分配一个长度位 side 空间,此函数是一个指针型函数,返回的指针是该分配区域的开头的位置(或首地址) 注意指针的类型位void 即不指向任何类型的数据,只提供一个地址。放什么类型的数据,强制转换为什么类型。 如果函数未能成功申请到空间(内存不足),返回空指针 NULL
上面的代码也该改为
char *temp = (char *)malloc(SIZE_20M);

发表于 2015-07-23 08:46:25 回复(0)
栈分配内存时,效率比堆高。栈大小一般为2Mb。只有全局变量或static变量会初始化为0。
发表于 2019-03-12 11:47:23 回复(0)
在栈上分配内存时效率更高;
只有全局变量或者静态变量才会初始公为0,其它的情况,变量如果不初始化,值是未知的。
发表于 2016-05-16 17:48:07 回复(0)
栈上的数据是一个随机值,一般是0xcccccccc,而堆上的内存如果不调用相应的构造函数或者显示初始化它是不会被初始化的
发表于 2015-08-22 08:32:11 回复(0)
我想知道答案
发表于 2014-11-08 22:00:15 回复(0)
堆区和栈区都不会自动初始化,自动初始化会在未赋值的静态/全局区。
发表于 2024-03-10 11:13:19 回复(0)
栈区执行效率比堆区高。 只有全局变量和static变量才会初始化
发表于 2023-03-18 10:45:32 回复(0)
答案B
A   func_a()动态分配的数据位于堆区,func_b()的temp位于栈区,栈区的执行效率高于堆区,故func_b()效率高
C  func_b()中没有动态分配的内存,不存在泄露问题
D  都不会自动初始化为0,只有全局变量或者static变量会初始化为0
B  栈的空间一般为2M,分配太多栈空间程序肯定会崩溃
发表于 2022-10-05 11:53:13 回复(0)
<p>这个题考察数组的内存分配,学到了。</p><p>题目很不错,但是B选项描述有问题,准确的说,应该是先用太多栈空间。</p>
发表于 2020-10-12 22:10:40 回复(0)
迭头像
可以
发表于 2016-12-20 18:48:08 回复(0)
这题应该选b吧   func_a 在堆上分配, 明显效率会更低一些

发表于 2015-06-25 11:25:46 回复(0)
栈由系统自动分配,速度较快。但程序员是无法控制的。
堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便.
这题好像有问题,malloc的用法就不对。
发表于 2015-05-13 21:17:05 回复(2)
为什么申请20M这么大内存不会报错呢?栈和堆的最大允许内存是多大啊?求大神
发表于 2015-05-06 20:27:32 回复(1)