之间有什么区别:
char * a = malloc(size);
和
char a[size];
一个比另一个好吗?使用malloc有什么优势吗?
答案 0 :(得分:3)
您不能控制堆栈分配内存的生命周期范围,它只对范围有效(除非您将其设置为静态)。
malloc
用于在堆上分配内存。在你打电话给那个记忆的free
之前它是有效的。
在堆栈上分配内存的速度更快,通常是因为你实际上没有分配新的内存,你只是保留了你已经使用的更多内存,但你没有控制它的生命周期,它由你的块或功能的范围。
答案 1 :(得分:2)
char *a = malloc(size);
和char * a [size]之间有什么区别;`?
第一个声明指向char
的指针,并在堆上为它分配size
个字节。第二个分配size
个char
个指针。它们并不等同。
那个比另一个好吗?
不,它们有不同的用途。
使用
malloc()
时是否有任何优势?
是。如果要从函数返回数组,则无法执行此操作:
char a[size];
return a;
因为返回后a
超出了范围,并且使用它会导致未定义的行为。所以在这种情况下你必须使用
char *a = malloc(size);
return a;
(通常是这种情况,因为你可能希望每次都从函数返回一个新字符串 - 但是,如果这不是一个要求,你可以使用一个在本地声明的静态数组。)
但是,如果只在本地使用该数组,那么通常建议使用自动(堆栈)数组而不是malloc()
,因为这样可以避免增加内存碎片,并且堆栈操作可能比堆访问更快。 / p>