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

3

我试图理解关于堆栈和堆分配的内存量的一些内容。 假设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个字节从哪里来的?感谢您的帮助!

istr3怎么样? - tkausl
1个回答

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个堆栈字节

这是一种理想化的计算方法,现实可能更加复杂。不过作为理解内存模型的模型仍然很有用。


@Vipasane:我扩展了注释,以解答您剩下的问题。 - Peter G.
非常感谢你的努力!你真的帮了我很大的忙。 - Vipasana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接