在线编译器对计算机内存的影响

Posted

技术标签:

【中文标题】在线编译器对计算机内存的影响【英文标题】:Effect of Online Compiler on computer's memory 【发布时间】: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 当你释放一个未分配的指针时,现代操作系统上可能发生的最糟糕的事情是你的程序的运行时错误,其他进程不应该关心这个。 【参考方案1】:

由于一切都在远程计算机上运行,​​因此您的本地 PC 不会受到那里发生的任何事情的影响。

【讨论】:

我还听我的教授说你不应该使用与记忆有关的网上东西,这总是错误的。这是真的 ?不过,到目前为止,我还没有遇到任何关于指针的编译错误。 任何失败的东西都会在远程机器上失败。包括内存损坏。影响本地计算机的唯一方法是通过浏览器中的“零日”漏洞利用。【参考方案2】:

在线编译器不会访问您计算机的本地内存;所有运行过程都发生在远程机器上。因此,您的计算机不受在线编译器的影响,即使您使用 malloc()calloc() 甚至 free() 之类的函数。

例如,流行的在线编译器 Ideone 在 Sphere Engine 拥有的远程服务器上运行提交的代码。内存分配、编译、运行等……都在该服务器上进行。其他在线编译器也使用类似的服务。

请注意,上面已经说了;如果编译器滞后,或者您的代码有问题(例如进入意外的无限循环),那么您的浏览器可能会出现滞后或挂起(就像我的情况有时那样)。但这与您计算机的内存无关,因为只有打开的浏览器会受到影响,其他一切都应该可以正常工作。发生这种延迟的原因是由于远程服务器上的一些问题,由于代码错误或处理速度慢等原因导致延迟......此外,您的互联网速度可能很慢,这可能会导致一些延迟。不过,再说一遍,这和你机器的本地内存无关。

最后一段是对主要问题的补充说明。

【讨论】:

感谢额外的旁注。【参考方案3】:

它们通常是网络服务。他们接收程序并在沙箱(在服务器上)中编译、链接和运行它,并且只将输出返回给最终用户。虽然我不能对所有这些都发表评论,但这是典型的行为。所以总的来说,它们是安全的,它们不会使用您的计算机内存来运行代码。

【讨论】:

我还听我的教授说你不应该使用与记忆有关的网上东西,这总是错误的。这是真的 ?不过,到目前为止,我还没有遇到任何关于指针的编译错误。 在我的想法中,它实际上是一个开始学习编码的好地方。由于您不会破坏自己计算机的内存,这通常是新程序员试图用 C 之类的语言操作指针的情况。也许您的教授想要指出的是您没有选择大小的任何权力运行代码的沙箱内存(以防分配大内存)或其他与性能相关的规范。 @arash 你可能在你和系统内存之间有更多的抽象层。虽然在 C 中它已经非常抽象(以至于我们没有指针的真实地址,但在两者之间有一个映射器可以将它映射到虚拟内存),在在线编译器中,您可能有更多的抽象可以得到你糊涂了。 @Kami Kaze。我懂了。关于更多抽象层的好点。 :-) 我认为我应该标记@HardeyPandya,因为这是对您的(阿拉什)回答的评论,您会收到通知,而他可能不会

以上是关于在线编译器对计算机内存的影响的主要内容,如果未能解决你的问题,请参考以下文章

c语言程序解答(在线等)?

如何制作一款在线编译器

代码在线编译器(上)- 编辑及编译

代码在线编译器(上)- 编辑及编译

最值得使用的5个免费在线java编译器

Linux系统磁盘高级应用和Vi编译器