堆栈和堆的内存分配量(c)

时间:2016-08-27 15:13:34

标签: c memory memory-management

我尝试了解分配给堆栈和堆的内存量。 假设sizeof(char)= 1个字节,sizeof(void *)= 4个字节。 给出以下代码:

pygame.quit()

我们被告知分配给堆的内存量是5个字节,我知道这确实是malloc中的数量(strlen(str2)= 5)。 但是,我不明白的是,分配给堆栈的内存量是多少是18个字节?我认为如果它们给我们指针大小为4个字节的信息,那么我们有4个字节用于指针str1,另外6个字节用于数组str2(包括'/ 0')。我错过了什么?堆栈的18个字节来自哪里? 在此先感谢您的帮助!

1 个答案:

答案 0 :(得分: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个堆栈字节

这是一种理想主义的计算,现实可能更复杂。它仍然可以作为理解记忆的模型。