Questions tagged «memory-management»

动态分配和释放部分物理内存的过程,以响应程序请求(如果可能),请求者之间保持公平且无饥饿。

8
R内存管理/无法分配大小为n Mb的向量
我在尝试在R中使用大对象时遇到了问题。例如: > memory.limit(4000) > a = matrix(NA, 1500000, 60) > a = matrix(NA, 2500000, 60) > a = matrix(NA, 3500000, 60) Error: cannot allocate vector of size 801.1 Mb > a = matrix(NA, 2500000, 60) Error: cannot allocate vector of size 572.2 Mb # Can't go smaller anymore > rm(list=ls(all=TRUE)) …

3
应用程序可以使用的最大RAM数量是多少?
我对这个与Android操作系统的内存管理有关的问题非常好奇,因此我希望就该主题提供一个非常详细的答案。 我想知道的是: Android应用程序(不是系统应用程序)可以使用的最大内存量(兆字节 / 占总RAM的百分比)是多少? Android版本之间有什么区别吗? 关于设备制造商有什么区别吗? 最重要的是: 什么被视为/ 这是什么取决于当它涉及到系统中确定多少内存的应用程序可以在运行时使用(假设每个应用程序的内存最大是不是一个静态的数字)? 到目前为止(截至2013年)我所听到的: 早期的Android设备的每个应用上限为16MB 后来这个上限增加到24MB或32MB 是什么让我非常好奇: 这两个限制都非常低。 我刚刚下载了Android任务管理器,以检查设备的RAM。我注意到的是,有些应用程序使用大约40-50 MB的RAM,这比上面提到的最大RAM使用量(例如32 MB)要明显得多。那么Android如何确定一个应用可以使用多少RAM?应用程序怎么可能超过该限制? 此外,我注意到当使用大约30-40 MB时,我的一些应用程序崩溃了(被系统杀死了?),并带有OutOfMemoryException。另一方面,一段时间后(可能是由于内存泄漏),我的手机上使用的应用程序使用的内存为100 MB以上,并且不会崩溃或消失。因此,在确定可以保留多少RAM时,显然还取决于应用程序本身。这怎么可能?(我使用具有768 MB RAM的HTC One S进行了测试) 免责声明:我不以任何方式与Android Task Manager应用关联。

8
正确实现IDisposable
在我的课程中,我实现IDisposable的方式如下: public class User : IDisposable { public int id { get; protected set; } public string name { get; protected set; } public string pass { get; protected set; } public User(int UserID) { id = UserID; } public User(string Username, string Password) { name = Username; pass = …

26
尝试读取或写入受保护的内存。这通常表明其他内存已损坏
我希望有人能启发我有关可能导致此错误的原因: 尝试读取或写入受保护的内存。这通常表明其他内存已损坏。 我无法真正发布代码,因为此错误似乎在应用程序的任何随机区域中引发。该应用程序将在引发错误之前的12-48小时内运行。有时它会在看似随机的位置停止并引发上述错误,而其他时候整个应用程序都停止了,并且我得到一个屏幕错误,该错误的内容大致上是“ ...中存在致命错误……这可能是CLR中的错误或...”有关PInvoke的信息或其他不相关的信息。发生这种情况时,所有线程均显示已终止,并且没有可用的调试信息。 简而言之,这就是应用程序的作用: 它是一个完全用C#编写的多线程服务器应用程序。客户端通过套接字连接到服务器。服务器为客户端运行一个虚拟的“环境”,使客户端可以相互与环境进行交互。它消耗了大量内存,但我看不到它在泄漏。它通常消耗约1.5GB。我不认为其泄漏是因为在整个应用程序运行期间内存使用率保持相对恒定。即使客户没有做任何事情,它仍在不断运行的代码可以维护环境。它不使用任何第三方软件或其他API。此应用程序使用的唯一外部资源是套接字连接和SQL数据库连接。它运行在64位服务器上。我已经尝试使用.net 2.0、3.5和4在VS2008和VS2010中对此进行调试。 我尝试关闭编译器优化和几个Microsoft修补程序。似乎没有什么可以解决这个问题。如果有人知道任何可能的原因,或某种方式识别导致问题的原因,将不胜感激。

8
Java中变量的内存地址
请看下面的图片。当我们在Java中用new关键字创建对象时,我们正在从OS获取内存地址。 编写时,out.println(objName)我们可以看到一个“特殊”字符串作为输出。我的问题是: 这是什么输出? 如果是操作系统给我们的内存地址: a)如何将该字符串转换为二进制? b)如何获得一个整数变量地址?

10
减少Django的内存使用量。低挂水果?
我的内存使用量随着时间的推移而增加,并且重新启动Django对用户而言并不友好。 我不确定如何分析内存使用情况,但是一些有关如何开始测量的提示将很有用。 我感觉有些简单的步骤可以带来很大的收益。确保将“调试”设置为“假”是显而易见的。 有人可以建议别人吗?在低流量的网站上缓存会带来多少改善? 在这种情况下,我使用mod_python在Apache 2.x下运行。我听说mod_wsgi较为精简,但在此阶段进行切换将非常棘手,除非我知道收益会很大。 编辑:感谢到目前为止的提示。关于如何发现内存用尽的任何建议?是否有任何有关Python内存分析的指南? 同样如前所述,有些事情会使切换到mod_wsgi变得很棘手,因此我想对在朝这个方向努力之前所能获得的收益有所了解。 编辑:卡尔在这里发布了更详细的回复,值得一读:Django部署:减少Apache的开销 编辑: Graham Dumpleton的文章是我在MPM和mod_wsgi相关的东西上找到的最好的文章。我很失望,但是没人能提供有关调试应用程序本身的内存使用情况的任何信息。 最终编辑:好吧,我一直在与Webfaction讨论这个问题,看他们是否可以协助重新编译Apache,这就是他们的话: “我真的认为切换到MPM Worker + mod_wsgi设置不会给您带来太大的好处。我估计您可能可以节省20MB左右,但可能不超过20MB。” 所以!这使我回到了最初的问题(我仍然不明智)。如何确定问题所在?这是一个众所周知的准则,如果不进行测试以查看需要优化的地方就不会进行优化,但是关于测量Python内存使用情况的教程的方式很少,而针对Django的教程则完全没有。 感谢大家的帮助,但我认为这个问题仍然悬而未决! 另一个最终编辑;-) 我在django-users列表上问了这个,并得到了一些非常有帮助的回复 老实说,有史以来最后一次更新! 这是刚刚发布。可能是迄今为止最好的解决方案:使用Pympler分析Django对象的大小和内存使用情况




6
Visual Studio如何处理删除的指针,为什么?
我正在阅读的一本C ++书指出,当使用delete操作符删除指针时,指向该位置的内存将被“释放”,并且可以覆盖。它还指出,指针将继续指向相同的位置,直到将其重新分配或设置为为止NULL。 但是在Visual Studio 2012中;事实并非如此! 例: #include <iostream> using namespace std; int main() { int* ptr = new int; cout << "ptr = " << ptr << endl; delete ptr; cout << "ptr = " << ptr << endl; system("pause"); return 0; } 当我编译并运行该程序时,将得到以下输出: ptr = 0050BC10 ptr = 00008123 …

29
避免C ++中内存泄漏的一般准则
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 有什么常规提示可确保我不会泄漏C ++程序中的内存?我如何确定谁应该释放已经动态分配的内存?

9
什么时候以及为什么编译器会在malloc / free / new / delete上将内存初始化为0xCD,0xDD等?
我知道编译器有时会使用诸如0xCD和的某些模式来初始化内存0xDD。我想知道的是何时以及为什么发生这种情况。 什么时候 这特定于所使用的编译器吗? 做malloc/new与free/delete工作以同样的方式对本? 它是平台特定的吗? 它会在其他操作系统(例如Linux或)上发生VxWorks吗? 为什么 我的理解是,这仅在Win32调试配置中发生,它用于检测内存溢出并帮助编译器捕获异常。 您能提供一些有关初始化有用的实际例子吗? 我记得读过一些东西(也许在代码完成2中),说在分配内存时将内存初始化为已知模式是很好的,某些模式会触发中断,Win32从而导致调试器中显示异常。 这有多便携?

4
在Python中释放内存
在以下示例中,我有一些有关内存使用的相关问题。 如果我在解释器中运行, foo = ['bar' for _ in xrange(10000000)] 我的机器上使用的实际内存最高为80.9mb。那我 del foo 实际内存下降,但仅限于30.4mb。解释器使用4.4mb基线,因此不26mb向OS 释放内存有什么好处?是因为Python在“提前计划”,以为您可能会再次使用那么多的内存? 它为什么50.5mb特别释放- 释放的量基于什么? 有没有一种方法可以强制Python释放所有已使用的内存(如果您知道不会再使用那么多的内存)? 注意 此问题不同于我如何在Python中显式释放内存? 因为这个问题主要解决了内存使用量相对于基线的增加,即使解释器通过垃圾回收(使用gc.collect或不使用)释放了对象之后。

12
为什么不删除将指针设置为NULL?
我一直想知道为什么删除后将指针自动设置为NULL 并不是标准的一部分。如果得到解决,那么由于无效指针而导致的许多崩溃将不会发生。但话虽如此,我仍然可以想到该标准限制了这一点的几个原因: 性能: 附加说明可能会降低delete性能。 可能是因为const指针。 然后我想标准再次可以为这种特殊情况做些什么。 有谁知道不允许这样做的确切原因?

2
Haskell数据类型的内存占用量
如何找到在Haskell中存储某种数据类型的值所需的实际内存量(主要是GHC)?是否可以在运行时(例如在GHCi中)对其进行评估,还是可以从其组件中估算复合数据类型的内存需求? 通常,如果已知类型a和的内存要求b,则代数数据类型的内存开销是多少,例如: data Uno = Uno a data Due = Due a b 例如,这些值占用多少字节内存? 1 :: Int8 1 :: Integer 2^100 :: Integer \x -> x + 1 (1 :: Int8, 2 :: Int8) [1] :: [Int8] Just (1 :: Int8) Nothing 我知道实际的内存分配是由于延迟垃圾回收而导致的。由于懒惰的评估,它可能有很大的不同(并且thunk的大小与值的大小无关)。问题是,在给定数据类型的情况下,充分评估其值会占用多少内存? 我发现:set +sGHCi中有一个选项可以查看内存统计信息,但是目前尚不清楚如何估算单个值的内存占用量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.