c - 在使用局部变量的 C 分配/取消分配内存中哪个更好?为什么?

标签 c pointers allocation memory-management

如果我需要进行字符串操作或操作任何类型的数组,无论是标准类型(如 int 还是自定义数据结构)。什么是更好的局部变量或动态分配和取消分配内存?

我知道,如果您使用的是局部变量,则不需要分配/取消分配内存,这可能会使我们免于内存泄漏。但我想知道为什么人们喜欢使用动态分配内存。它只是一种编码风格还是真的有它的好处。它还取决于我们正在编译的系统还是取决于编译器?

即使系统有足够的内存和速度资源,哪种技术更适合优化代码?

最佳答案

就速度而言,本地的堆栈分配操作几乎总是胜过动态内存分配。原因是,在动态内存分配期间,您的程序需要向操作系统寻求帮助。这会导致上下文切换(非常慢/昂贵),并阻塞直到操作系统返回一 block 内存(它甚至可能无法返回)。

然而,您的程序已经拥有自己的堆栈,因此它可以根据需要操作它而不会中断执行流程(多任务处理除外,这无论如何都不受您的控制)。

动态内存分配的好处是有时我们直到运行时才知道需要分配多少内存。如果没有动态分配,我们将需要预先分配一个静态缓冲区,并为最坏的情况(我们可能有也可能没有足够的资源)预留足够的内存。

关于c - 在使用局部变量的 C 分配/取消分配内存中哪个更好?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16532282/

相关文章:

c - 指针的工作

C99:复数的虚部能否为负零

c - 如何声明返回函数指针的函数?

c - 将数组放在堆上而不是堆栈上,是否可以消除段错误的可能性?

c++ - 使用 WriteProcessMemory 和指针写入另一个进程的内存

c++ - 将变量作为指针、引用、常量引用等传递 : What Happens at the Hardware Level?

c - 内存地址增加四

c - 动态分配指针数组到C中的结构

c - 用 C 编程时将文件保存为 UTF-8