内存分配量堆栈和堆(c)
我尝试了解分配给堆栈和堆的内存量。 假设sizeof(char)= 1个字节,sizeof(void *)= 4个字节。 给出以下代码:
#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)。 但是,我不明白的是分配给堆栈的内存数量是多少个字节? 我认为,如果他们给我们的指针大小为4个字节的信息,所以我们有4个字节的指针str1和另外6个字节的数组str2(包括'/ 0')。 我错过了什么? 堆栈的18个字节来自哪里? 在此先感谢您的帮助!
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个堆栈字节
这是一个理想的计算,现实可能会更复杂。 它仍然可以作为理解记忆的模型。
链接地址: http://www.djcxy.com/p/79253.html