在C和C++等编程语言中,人们经常提到静态和动态内存分配.我理解这个概念,但短语"所有内存在编译期间被分配(保留)"总是让我感到困惑.
据我所知,编译将高级C/C++代码转换为机器语言并输出可执行文件.如何在编译文件中"分配"内存?是不是内存总是在RAM中分配所有虚拟内存管理的东西?
根据定义,内存分配不是运行时概念吗?
如果我在我的C/C++代码中创建一个1KB静态分配的变量,那么这会增加可执行文件的大小吗?
这是在"静态分配"标题下使用该短语的页面之一.
我正在开发一款至少以3g为目标的ios游戏.我们正在将高清资产用于视网膜显示设备(iphone 4,ipod touch 4th gen).
记忆方面,Ipod Touch 4th gen似乎是我们最受约束的设备,因为它具有与3gs相同的RAM(256与Iphone 4的512相比),但我们正在使用HD资产.该应用程序曾经在尝试加载100-110mb的ram时崩溃,但现在我们已经降到70MB,我们从来没有加载崩溃.
经过大量的搜索后,似乎没有官方的硬限制,那么我们应该如何知道要使用什么内存预算才能安全?我们希望能够为艺术家提供他们可以使用的预算,而不必担心每张地图的内存问题.
我创建了两个名单l1和l2,但每一个具有不同的创建方法:
import sys
l1 = [None] * 10
l2 = [None for _ in range(10)]
print('Size of l1 =', sys.getsizeof(l1))
print('Size of l2 =', sys.getsizeof(l2))
Run Code Online (Sandbox Code Playgroud)
但输出让我感到惊讶:
Size of l1 = 144
Size of l2 = 192
Run Code Online (Sandbox Code Playgroud)
使用列表推导创建的列表在内存中的大小更大,但是这两个列表在Python中是相同的.
这是为什么?这是CPython内部的一些东西,还是其他一些解释?
我对这个关于Android操作系统的内存管理的问题很好奇,所以我希望对这个主题有一个非常详细的答案.
我想知道的是:
最重要的是:
到目前为止我所听到的(直到2013年):
是什么让我很好奇:
这两个限制都非常低.
我刚刚下载了Android任务管理器来检查我的设备RAM.我注意到有些应用程序使用大约40-50兆字节的RAM,这比上面提到的最大RAM使用量(比如说32 MB)要多得多.那么Android如何确定应用程序可以使用多少RAM?应用程序如何超出此限制?
此外,我注意到当使用大约30-40兆字节时,我的一些应用程序崩溃(被系统杀死?)和OutOfMemoryException.另一方面,我的手机上运行的应用程序使用100 MB以上的一段时间后(可能由于内存泄漏)不会崩溃或被杀死.因此,在确定可以节省多少RAM时,显然还取决于应用程序本身.这怎么可能?(我用带有768 MB RAM的HTC One S进行了测试)
免责声明:我不以任何方式与Android任务管理器应用程序相关联.
memory android memory-management out-of-memory android-memory
我的内存使用量随着时间的推移而增加,重新启动Django并不适合用户.
我不确定如何分析内存使用情况,但有关如何开始测量的一些提示将非常有用.
我有一种感觉,有一些简单的步骤可以产生巨大的收益.确保'debug'设置为'False'是一个显而易见的问题.
谁能建议其他人?在低流量网站上缓存多少改进?
在这种情况下,我使用mod_python在Apache 2.x下运行.我听说mod_wsgi有点精简但在这个阶段转换会很棘手,除非我知道收益会很大.
编辑:感谢您的提示到目前为止.有关如何发现内存消耗的建议吗?是否有任何Python内存分析指南?
另外如上所述,有一些事情会让切换到mod_wsgi变得棘手,所以我想知道在向这个方向前进之前我可以期待的收益.
编辑: Carl在这里发布了一个稍微更详细的回复,值得一读:Django部署:削减Apache的开销
编辑: Graham Dumpleton的文章是我在MPM和mod_wsgi相关的东西上发现的最好的文章.我很失望,没有人可以提供有关调试应用程序本身的内存使用情况的任何信息.
最终编辑:我一直在与Webfaction讨论这个问题,看看他们是否可以协助重新编译Apache,这是他们在这个问题上的说法:
"我真的不认为你会通过切换到MPM Worker + mod_wsgi设置获得很多好处.我估计你可以节省大约20MB,但可能没有多少."
所以!这让我回到原来的问题(我仍然不是明智的).如何确定问题所在?这是一个众所周知的格言,如果不进行测试就无法优化,看看你需要优化的地方,但是关于测量Python内存使用量的教程很少,而且根本没有针对Django的内容.
感谢大家的帮助,但我认为这个问题仍然存在!
另一个最终编辑;-)
我在django-users列表中询问了这个问题,得到了一些非常有帮助的回复
老实说,有史以来最后一次更新!
这刚刚发布.可能是最好的解决方案:使用Pympler分析Django对象大小和内存使用情况
通过考虑将内存分为四个部分:数据,堆,堆栈和代码,全局变量,静态变量,常量数据类型,局部变量(在函数中定义和声明),变量(在main函数中),指针,并动态分配空间(使用malloc和calloc)存储在内存中?
我认为他们将分配如下:
char *arr,int *arr)------->堆我只是从C的角度来指这些变量.
如果我错了,请纠正我,因为我是C的新手.
在我的类中,我实现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 = Password;
}
// Other functions go here...
public void Dispose()
{
// Clear all property values that maybe have been set
// when the class was instantiated
id = 0; …Run Code Online (Sandbox Code Playgroud) 我遇到了试图在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))
> a = matrix(NA, 3500000, 60) # Now it works
> b = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb # But that is all there …Run Code Online (Sandbox Code Playgroud) 请看下面的图片.当我们用java创建一个带有new关键字的对象时,我们从OS获取一个内存地址.
当我们写作时,new我们可以看到一个"特殊"字符串作为输出.我的问题是:
如果是操作系统给我们的内存地址:
a)如何将此字符串转换为二进制?
b)如何获得一个整数变量地址?
