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

标签 c memory memory-management

我尝试了解有关分配给堆栈和堆的内存量的信息。 假设 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/

相关文章:

c - MPI基础类(class)

c# - 自 C# 以来的 C++ 代码等效吗?

c - 使用 Windows API 使用互斥锁方法创建 100 个线程会导致意外结果,如何修复?

Java 内存开销

cocoa - NSUndoManager 是否保留其参数?

c - C中的谐波序列

ios - 带有 CFNotificationCenter 强引用的 UIViewController 不会发布

mysql - 限制 MySQL 用户的 CPU/内存使用

c++ - 基于变量值静态定义数组 C/C++

ios - 适用于 iOS 的 Google Maps SDK 不断增加内存使用量