gpt4 book ai didi

c - 关于内存/malloc的一些问题

转载 作者:行者123 更新时间:2023-12-02 05:37:25 24 4
gpt4 key购买 nike

变量是如何真正存储在内存中的?我问这个是因为假设你 malloc 一段内存并将其分配给一个指针,例如

int *p = malloc(10 * sizeof(int));

然后运行 ​​for 循环以通过 p 分配整数 - 这似乎与声明 int 变量并向其分配整数不同,如下所示:

int x = 10;

因为这是一个更明确的声明,您希望将 int 存储在内存中,而在 malloc 中,它只是您通过指针算术遍历的一 block 内存。

我在这里遗漏了什么吗?非常感谢。

最佳答案

当您需要数据数组时,例如,当您从用户收到数字但不知道长度而无法使用固定数量的整数时,您需要一种动态方式来为这些整数创建内存。 malloc 和他的 friend 让你可以做到这一点。除其他事项外:

  • malloc 可让您根据当前需要的大小动态创建内存。
  • 使用 malloc 时,退出作用域时内存将不会被释放。
  • 使用 malloc 来表示 10 个项目的数组或在堆栈上创建一个 10 个项目的数组,在“显式声明您想要将 int 存储在内存中”的意义上没有区别,只是我的内容有所不同已经写在这里以及更多内容

here是一篇关于堆和栈区别的文章

我正在写每种方式的优点:

堆栈

  • 访问速度非常快
  • 不必显式取消分配变量
  • 空间由CPU有效管理,内存不会变得碎片
  • 仅限局部变量
  • 堆栈大小限制(取决于操作系统)
  • 无法调整变量大小

  • 变量可以全局访问
  • 内存大小没有限制
  • (相对)访问速度较慢
  • 无法保证空间的有效利用,随着内存块的分配和释放,内存可能会随着时间的推移而变得碎片化
  • 您必须管理内存(您负责分配和释放变量)
  • 可以使用 realloc() 调整变量的大小

关于c - 关于内存/malloc的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18380293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com