malloc() 和固定大小的简单声明之间的区别
Difference between malloc() and simple declaration in fixed sizes
假设我想为 x double
、x 的数组获取 space一个整数。
谁能给我解释一下
之间的区别
double myArray[x];
和
malloc(x*sizeof(double));
除了 malloc()
returns 一个 void
指针 ?
提前感谢您的回答。
double myArray[x];
这里是内存
- 在堆栈上声明
- 在编译时声明,因此更快
- 只能在声明函数的范围内访问,(如果在全局范围内声明则全局访问)
- 如果声明函数 returns
将被释放
- 一般在编译时已知数组大小时使用
myArray = malloc(x*sizeof(double));
这里是内存
- 在堆上声明(可变长度数组 (C99) 除外,如 Malina 所指,在堆栈上分配,阅读更多内容 here)
- 在 运行 时宣布,因此速度较慢
- 只要可以访问 myArray 变量就可以访问
- 调用
free(myArray)
或程序退出时释放
- 通常在编译时数组大小未知的情况下使用
假设我想为 x double
、x 的数组获取 space一个整数。
谁能给我解释一下
之间的区别double myArray[x];
和
malloc(x*sizeof(double));
除了 malloc()
returns 一个 void
指针 ?
提前感谢您的回答。
double myArray[x];
这里是内存
- 在堆栈上声明
- 在编译时声明,因此更快
- 只能在声明函数的范围内访问,(如果在全局范围内声明则全局访问)
- 如果声明函数 returns 将被释放
- 一般在编译时已知数组大小时使用
myArray = malloc(x*sizeof(double));
这里是内存
- 在堆上声明(可变长度数组 (C99) 除外,如 Malina 所指,在堆栈上分配,阅读更多内容 here)
- 在 运行 时宣布,因此速度较慢
- 只要可以访问 myArray 变量就可以访问
- 调用
free(myArray)
或程序退出时释放 - 通常在编译时数组大小未知的情况下使用