变量是如何真正存储在内存中的?我问这个是因为假设你 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/