根据c99标准,我们可以编写以下代码,它是完全合法的
int x; scanf("%d",&x); int ar[x];
我的问题是,如果我可以分配这样的数组,为什么我需要malloc再次分配可变大小的数组?
另外,请您解释一下可变长度数组的分配情况如何? 内心深处,是否调用malloc来分配数组或者是什么?
有两个原因让我想到:
可变长度数组分配(或实际上任何数组声明)在堆栈上完成(假设GCC编译器)。 Malloc从堆中分配内存。
堆与堆栈的两个优点:1。堆栈要小得多。 您的可变大小数组很可能会导致堆栈溢出。 2.在返回时声明的函数返回后,在堆栈上分配的项目不会生效。
在C11标准中 ,可变长度数组变为“可选”,我将其称为“实现定义”,因此它们不再是可移植的。
这显示在
6.7.6.2数组声明符第4节
可变长度数组是实现不需要支持的条件特性。
和
6.10.8.3条件特征宏部分1
__STDC_NO_VLA__
整数常量1,用于指示实现不支持可变长度数组或可变修改类型。
使用malloc
而不是VLA的一些优点是:
需要了解更多c/c++开发分享可变长度与Malloced ed数组,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享可变长度与Malloced ed数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979919.html