【问题标题】:Difference between malloc() and simple declaration in fixed sizes [duplicate]malloc() 和固定大小的简单声明之间的区别[重复]
【发布时间】:2015-07-24 16:25:09
【问题描述】:

假设我想为 x double 的数组获取空间,x 是一个整数。

谁能解释一下两者的区别

double myArray[x];

malloc(x*sizeof(double));

除了malloc() 返回一个void 指针这一事实之外?

提前感谢您的回答。

【问题讨论】:

    标签: c double malloc difference


    【解决方案1】:

    double myArray[x];这里是内存

    1. 在堆栈上声明
    2. 在编译时声明,因此速度更快
    3. 只能在声明函数的范围内访问,(如果在全局范围内声明,则全局访问)
    4. 如果声明函数返回将被释放
    5. 一般在编译时知道数组大小时使用

    myArray = malloc(x*sizeof(double));这里是内存

    1. 在堆上声明(Malina 指出的在堆栈上分配的可变长度数组 (C99) 除外,阅读更多 here
    2. 在运行时声明,因此速度较慢
    3. 在可访问 myArray 变量的任何地方都可访问
    4. 将在调用free(myArray) 或程序退出时释放
    5. 通常在编译时数组大小未知时使用

    【讨论】:

    • 在堆栈上声明并且只能在本地访问。如果声明为全局或静态,则不正确。
    • 仅当数组大小不变时才在堆栈上声明。在 C99 中,可变大小的数组位于程序的内部自动内存中。
    • @Malina 你能进一步解释一下吗?我第一次听到这个词——“程序的内部自动记忆”
    • @LPs 感谢您指出这一点
    • @Malina ,VLA 也是在栈上分配的,不是吗?
    猜你喜欢
    • 2011-05-23
    • 2016-04-20
    • 2014-11-21
    • 1970-01-01
    • 2015-07-29
    • 2016-12-16
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    相关资源
    最近更新 更多