malloc比声明好吗?

时间:2012-12-16 14:26:48

标签: c

  

可能重复:
  Difference between declaration and malloc

之间有什么区别:

char * a = malloc(size);  

char a[size];  

一个比另一个好吗?使用malloc有什么优势吗?

2 个答案:

答案 0 :(得分:3)

您不能控制堆栈分配内存的生命周期范围,它只对范围有效(除非您将其设置为静态)。

malloc用于在堆上分配内存。在你打电话给那个记忆的free之前它是有效的。

在堆栈上分配内存的速度更快,通常是因为你实际上没有分配新的内存,你只是保留了你已经使用的更多内存,但你没有控制它的生命周期,它由你的块或功能的范围。

答案 1 :(得分:2)

  

char *a = malloc(size);和char * a [size]之间有什么区别;`?

第一个声明指向char的指针,并在堆上为它分配size个字节。第二个分配sizechar个指针。它们并不等同。

  

那个比另一个好吗?

不,它们有不同的用途。

  

使用malloc()时是否有任何优势?

是。如果要从函数返回数组,则无法执行此操作:

char a[size];
return a;

因为返回后a超出了范围,并且使用它会导致未定义的行为。所以在这种情况下你必须使用

char *a = malloc(size);
return a;

(通常是这种情况,因为你可能希望每次都从函数返回一个新字符串 - 但是,如果这不是一个要求,你可以使用一个在本地声明的静态数组。)

但是,如果只在本地使用该数组,那么通常建议使用自动(堆栈)数组而不是malloc(),因为这样可以避免增加内存碎片,并且堆栈操作可能比堆访问更快。 / p>