2016-08-27 6 views
3

スタックとヒープに割り当てられるメモリの量について何かを理解しようとします。 sizeof(char)= 1バイト、sizeof(void *)= 4バイトとします。 は、次のコードを与えられた:スタックとヒープへのメモリ割り当て量(c)

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main() { 
    int i; 
    char *str1 = "hello"; 
    char str2[] = "hello"; 
    char *str3 = (char*)malloc(strlen(str2)); 
    //free code 
    return 0; 
} 

私たちは、ヒープに割り当てられたメモリの量が5バイトであることを言われている、と私は確かにこれはmalloc関数の金額(STRLEN(STR2)= 5)であることを理解します。 しかし、私が理解していないのは、スタックに割り当てられるメモリの量が18バイトであることです。ポインタサイズが4バイトという情報を与えると、ポインタstr1に4バイト、配列str2に6バイト( '/ 0'を含む)があると私は考えました。私は何が欠けていますか?スタックの18バイトはどこから来ますか? ご協力いただきありがとうございます!

+0

'i'と' str3'についてはどうですか? – tkausl

答えて

3
int i; // 4 stack bytes 
char *str1 = "hello"; // 4 stack bytes (pointing to a read only string constant) 
char str2[] = "hello"; // 6 stack bytes (containing a 6 byte string) 
char *str3 = (char*)malloc(strlen(str2)); // 4 stack bytes (pointing to heap memory from malloc) 

合計:18スタックバイト

これは理想主義的な計算で、現実はもっと複雑かもしれません。これはメモリを理解するためのモデルとしてはまだ有用です。

+0

@Vipasane:あなたの残りの質問に答えるためにコメントを広げました –

+0

おかげさまでありがとうございました!あなたは本当に私を助けました。 – Vipasana

関連する問題