3 回答

TA貢獻1890條經驗 獲得超9個贊
這里的問題是問題。讓我們假設你有一個很小的C(++也是,他們以相同的方式處理這個)程序,如下所示:
/* my.c */
char * str = "Your dog has fleas."; /* 1 */
char * buf0 ; /* 2 */
int main(){
char * str2 = "Don't make fun of my dog." ; /* 3 */
static char * str3 = str; /* 4 */
char * buf1 ; /* 5 */
buf0 = malloc(BUFSIZ); /* 6 */
buf1 = malloc(BUFSIZ); /* 7 */
return 0;
}
這既不在堆上的堆棧NOR上分配。相反,它被分配為靜態數據,并在大多數現代機器上放入自己的內存段。實際的字符串也被分配為靜態數據,并放入正確思考的機器中的只讀段。
只是一個靜態分配的指針; 靜態數據中的一個地址空間。
具有在堆棧上分配的指針,并且在main返回時將被有效地釋放。字符串,因為它是一個常量,在靜態數據空間中與其他字符串一起分配。
實際上分配與2完全相同。static關鍵字告訴您它不會在堆棧上分配。
......但是buf1在堆棧上,并且
... malloc的緩沖區空間在堆上。
順便說一下,孩子們不要在家里試試。 malloc具有感興趣的回報值; 你應該經常檢查返回值。
例如:
char * bfr;
if((bfr = malloc(SIZE)) == NULL){
/* malloc failed OMG */
exit(-1);
}
- 3 回答
- 0 關注
- 558 瀏覽