看看下面的例子
#include <stdio.h>
int main()
{
char buf1[3145728];
char buf2[3145728];
char buf3[3145728];
char buf4[3145728];
printf("ok\n");
return 0;
}
程式是沒有錯的,但是能執行嗎?
電腦會跟你說 Segmentation fault !!!
但是假如只有buf1及buf2就能順利執行。
這樣的問題就發生在我們建立的buf是在memory的stack,而stack並不夠大到可以容納我們的array。這就是所謂的stack overflow.
但假如我們使用global variable or dynamic memory allocate的方式就解決了,如下面的例子:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *buf1;
char *buf2;
char *buf3;
char *buf4;
char *buf5;
char *buf6;
if ((buf1 = (char *) malloc (3145728)) == NULL) {
printf("buf1 error\n");
return 9;
}
printf("buf1 ok\n");
if ((buf2 = (char *) malloc (3145728)) == NULL) {
printf("buf2 error\n");
return 9;
}
printf("buf2 ok\n");
.
.
.
if ((buf6 = (char *) malloc (3145728)) == NULL) {
printf("buf6 error\n");
return 9;
}
printf("buf6 ok\n");
free(buf1);
free(buf2);
free(buf3);
free(buf4);
free(buf5);
free(buf6);
return 0;
}
這時你的Array配置在memory的heap,可以讓你有很大的空間使用。
所以在function中,local variable勿無限制的使用(雖然它也有優點),尤其是多線程很容易忽略它,不然就使用malloc()的方式,使用完後也記得要清理free()。
更多的知識可查詢stack、heap
沒有留言:
張貼留言