c/c++语言开发共享可变长度与Malloced ed数组

根据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

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐