use*_*486 0 c memory malloc dynamic-memory-allocation
下面是一个直接变量声明的例子。
double multiplyByTwo (double input) {
double twice = input * 2.0;
return twice;
}
Run Code Online (Sandbox Code Playgroud)
下面是一个动态内存分配的例子。
double *multiplyByTwo (double *input) {
double *twice = malloc(sizeof(double));
*twice = *input * 2.0;
return twice;
}
Run Code Online (Sandbox Code Playgroud)
如果我有选择,我会一直使用直接变量声明,因为代码看起来更易读。什么时候动态内存分配更合适?
什么时候动态内存分配更合适?
当编译时不知道分配大小时,我们需要使用动态内存分配。
除了上面的情况,还有一些其他的场景,比如
如果我们想要一个在运行时可重新调整大小的数据结构,我们需要进行动态内存分配。
动态分配的内存的生命周期保持有效,除非它是free()
d。有时,当从函数调用中返回某个变量的地址时,它会派上用场,否则,对于auto
变量,该地址将超出范围。
通常堆栈大小会受到适度限制。如果要创建和使用庞大的数组,最好使用动态内存分配。这将从堆中分配内存。