我尝试了解有关分配给堆栈和堆的内存量的信息。 假设 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)。 但是,我不明白的是分配给堆栈的内存量怎么是18字节?我想,如果他们给我们信息,指针大小是 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 个堆栈字节
这是一个理想化的计算,实际情况可能更复杂。作为理解内存的模型,它仍然很有用。
关于c - 栈和堆的内存分配量(c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39182636/