【发布时间】:2017-02-27 15:40:59
【问题描述】:
当我们声明任何变量时,尤其是在 C/C++ 中,它会根据其数据类型(以及机器)在计算机内存中分配。我的问题是,当我们在在线 IDE 中运行程序时,我的 PC/机器的内存是否被使用?
这个问题更多地是关于在 C 中动态分配内存的问题,因为无论出于何种原因,如果我们在函数的参数中滥用指针,如malloc()、calloc(),尤其是free(),有可能计算机内存在一定程度上受损(内存泄漏)。
因此,如果在线编译不使用电脑内存,那么我在在线IDE上大概可以使用这些功能,但不知道是什么情况。安全吗?
【问题讨论】:
-
即使在本地运行程序,也不会对计算机内存造成“损坏”。内存泄漏只是意味着如果您调用
malloc比free更多,调用最终将失败。就这样。一旦程序终止,操作系统就会重新整理并释放程序正在使用的所有内存。 -
这是 C 的摘录:Schildt 的完整参考。
free( )函数将 ptr 指向的内存返回给堆。这使得内存可用于将来的分配。必须仅使用先前使用动态分配系统函数之一分配的指针调用free( )。在调用中使用无效指针很可能会破坏内存管理机制并可能导致系统崩溃。如果传递一个空指针,free( )不执行任何操作。 -
是的,但是如果您运行任何现代操作系统,例如 Linux 或 Windows 或 OSX,整个堆都在虚拟内存中,当程序终止时会被回收。每个程序都有自己的堆,不会互相造成任何损害。
-
好吧,首先不要使用 Schildt 的任何东西,他可能是 C 语言中最糟糕的参考。请参阅:lysator.liu.se/c/schildt.html 和 seebs.net/c/c_tcn4e.html
-
当你释放一个未分配的指针时,现代操作系统上可能发生的最糟糕的事情是你的程序的运行时错误,其他进程不应该关心这个。
标签: c++ c memory memory-management