2017-02-27 207 views
1

当我们声明任何变量时,特别是在C/C++中,它会根据其数据类型(也是机器)在计算机内存中分配。我的问题是,当我们在在线IDE中运行程序时,我的PC /机器的内存是否被使用?在线编译器对计算机内存的影响

这个问题是更多的使用C动态分配内存此事的意思,因为,无论出于何种原因,如果我们滥用在像malloc()calloc()功能,特别是free()参数的指针,有可能是电脑的内存被损坏在一定程度上(内存泄漏)。因此,如果在线编译不使用计算机内存,那么我可以在联机IDE上使用这些函数,但我不知道是什么情况。它安全吗?

+0

即使您在本地运行该程序,计算机的内存也不会受到“损害”。内存泄漏只是意味着,如果你调用'malloc' *很多'free',那么调用最终会失败。就这样。一旦程序终止,操作系统会重新整理并释放程序正在使用的所有内存。 –

+0

这是C的摘录:Schildt的完整引用。 'free()'函数将ptr指向的内存返回给堆。这使内存可供未来分配。 必须使用先前使用动态分配系统函数之一分配的指针调用free()。在调用中使用无效指针很可能会破坏内存管理机制,并可能导致系统崩溃。如果你传递一个空指针,'free()'不执行任何操作。 – Buddhist

+1

是的,但如果你运行任何现代操作系统,如Linux或Windows或OSX,整个堆在虚拟内存中,当程序终止时会回收它。每个程序都有自己的堆,不会对彼此造成任何损害。 –

回答

8

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

+0

我也从我的教授那里听说过,你不应该使用与记忆相关的在线内容,它总是被误认为是错误的。这是真的 ?虽然,直到现在,我还没有经历过关于指针的任何编译错误。 – Buddhist

+1

任何失败的东西都会在远程机器上失败。包括内存损坏。影响本地计算机的唯一方法是在浏览器中使用“零日”漏洞。 –

3

在线编译器不能访问您计算机的本地内存;所有的运行过程都在远程机器上进行。因此,即使使用malloc()calloc()或甚至free()等功能,计算机也不受在线编译器的影响。

例如,Ideone是一种流行的在线编译器,它在Sphere Engine所拥有的远程服务器上运行提交的代码。内存分配,编译,运行等等都发生在该服务器上。其他在线编译器使用类似的服务。

请注意,如上所述;如果编译器滞后,或者如果你的代码有问题(就像它进入了一个无意的无限循环),那么你的浏览器可能会遇到延迟或者可能会挂起(就像我的情况那样)。但这与您的计算机内存无关,因为只有打开的浏览器受到影响,其他所有内容才能正常工作。这种滞后发生的原因是由于远程服务器上的某些问题,由于代码错误或处理速度较慢等原因而出现滞后现象。此外,您的Internet速度可能较慢,这可能会导致一些滞后。但是,再说一遍,这与本机的本地内存无关。

这最后一段是对主要问题的附加说明。

+1

感谢您的额外注意。 – Buddhist

2

它们通常是Web服务。他们收到程序并编译,链接并在沙箱中(服务器上)运行它,并仅将输出返回给最终用户。虽然我不能评论所有这些,但这是典型的行为。所以一般来说,他们是安全的,他们不使用你的计算机内存来运行代码。

+0

我也从我的教授那里听说过,你不应该使用与记忆相关的在线内容,它总是被误认为是错误的。这是真的 ?虽然,直到现在,我还没有经历过关于指针的任何编译错误。 – Buddhist

+0

在我的想法中,它实际上是一个开始学习编码的好地方。因为你不会破坏你自己的计算机的内存,这是新程序员试图用C语言操作指针的典型例子。也许你的教授想指出的是,你没有选择大小的权力你正在运行你的代码的沙箱内存(如果你分配大内存)或其他性能相关的规格。 – Arash

+0

@arash你可能在你和系统内存之间有更多层次的抽象。在C语言中,它已经非常抽象了(至于我们没有指针的真实地址,中间有一个映射器可以将它映射到虚拟内存),但在一个在线编译器中,您可能会有更多的抽象你困惑。 –