Questions tagged «memory-management»

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

27
什么是堆栈和堆?
编程语言书籍解释了值类型是在堆栈上创建的,而引用类型是在堆上创建的,而没有说明这两个是什么。我还没有阅读清楚的解释。我了解堆栈是什么。但, 它们在哪里和在哪里(物理上在真实计算机的内存中)? 它们在多大程度上受操作系统或语言运行时的控制? 他们的范围是什么? 什么决定了它们的大小? 是什么使速度更快?



18
为什么C ++程序员应尽量减少对“新”的使用?
我在使用std :: list <std :: string>时偶然发现了std :: string的内存溢出问题内存泄漏,其中一条评论说: 停止使用new太多。我看不到您在任何地方使用新产品的任何原因。您可以在C ++中按值创建对象,这是使用该语言的巨大优势之一。 您不必在堆上分配所有内容。 不要像Java程序员那样思考。 我不确定他的意思。 为什么要在C ++中尽可能频繁地通过值创建对象,它在内部有什么不同? 我是否误解了答案?


2
当正好遍历8192个元素时,为什么我的程序运行缓慢?
这是有问题的程序的摘录。矩阵img[][]的大小为SIZE×SIZE,并初始化为: img[j][i] = 2 * j + i 然后,创建一个矩阵res[][],并将此处的每个字段作为img矩阵中周围9个字段的平均值。为简单起见,边框保留为0。 for(i=1;i<SIZE-1;i++) for(j=1;j<SIZE-1;j++) { res[j][i]=0; for(k=-1;k<2;k++) for(l=-1;l<2;l++) res[j][i] += img[j+l][i+k]; res[j][i] /= 9; } 这就是程序的全部内容。为了完整起见,这是之前的内容。之后没有代码。如您所见,这只是初始化。 #define SIZE 8192 float img[SIZE][SIZE]; // input image float res[SIZE][SIZE]; //result of mean filter int i,j,k,l; for(i=0;i<SIZE;i++) for(j=0;j<SIZE;j++) img[j][i] = (2*j+i)%8196; 基本上,当SIZE为2048的倍数时,该程序运行缓慢,例如执行时间: SIZE = 8191: 3.44 secs …

13
如何确定Python中对象的大小?
我想知道如何在Python中获取对象的大小,例如字符串,整数等。 相关问题:Python列表(元组)中每个元素有多少个字节? 我使用的XML文件包含指定值大小的大小字段。我必须解析此XML并进行编码。当我想更改特定字段的值时,我将检查该值的大小字段。在这里,我想比较输入的新值是否与XML中的值相同。我需要检查新值的大小。如果是字符串,我可以说它的长度。但是如果是int,float等,我会感到困惑。

8
建议使用哪个Python内存分析器?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 我想知道我的Python应用程序的内存使用情况,尤其想知道哪些代码块/部分或对象消耗了最多的内存。Google搜索显示商用的是Python Memory Validator(仅限Windows)。 开源的是PySizer和Heapy。 我没有尝试过任何人,所以我想知道哪个是最好的考虑因素: 提供大多数细节。 我必须要做最少的更改,也可以不做任何更改。

27
技巧以管理R会话中的可用内存
人们使用什么技巧来管理交互式R会话的可用内存?我使用下面的功能(基于Petr Pikal和David Hinds在2004年r-help列表中的发布)列出(和/或排序)最大的对象,并偶尔列出rm()其中的一些对象。但是到目前为止,最有效的解决方案是...在具有足够内存的64位Linux下运行。 人们还想分享其他有趣的技巧吗?请每个帖子一个。 # improved list of objects .ls.objects <- function (pos = 1, pattern, order.by, decreasing=FALSE, head=FALSE, n=5) { napply <- function(names, fn) sapply(names, function(x) fn(get(x, pos = pos))) names <- ls(pos = pos, pattern = pattern) obj.class <- napply(names, function(x) as.character(class(x))[1]) obj.mode <- napply(names, mode) obj.type <- …

4
什么是专用字节,虚拟字节,工作集?
我正在尝试使用perfmon Windows实用程序来调试进程中的内存泄漏。 这是perfmon解释这些术语的方式: 工作集是此进程工作集的当前大小(以字节为单位)。工作集是进程中的线程最近接触的一组内存页面。如果计算机中的可用内存超过阈值,则即使不使用这些页面,它们也将保留在进程的工作集中。当可用内存低于阈值时,将从“工作集”中修剪页面。如果需要它们,将在离开主存储器之前将它们软故障恢复到工作集中。 虚拟字节是进程正在使用的虚拟地址空间的当前大小(以字节为单位)。使用虚拟地址空间并不一定意味着相应使用磁盘或主内存页面。虚拟空间是有限的,该过程可能会限制其加载库的能力。 专用字节数是该进程已分配的当前无法与其他进程共享的内存大小(以字节为单位)。 这些是我的问题: 我是否应该测量私有字节,以确保该进程是否有泄漏,因为它不涉及任何共享库,并且如果发生泄漏,将来自该进程本身? 进程消耗的总内存是多少?是虚拟字节还是虚拟字节与工作集的总和? 专用字节,工作集和虚拟字节之间是否有任何关系? 是否有其他工具可以更好地了解内存使用情况?

19
我在什么情况下使用malloc和/或new?
我看到在C ++中有多种分配和释放数据的方法,而且我了解,当您调用malloc时应调用,free并且在使用new运算符时应与之配对,delete将两者混合使用是错误的(例如,调用free()已创建的内容)与new操作员联系),但我不清楚在实际程序中何时应使用malloc/ free以及何时应使用new/ delete。 如果您是C ++专家,请让我知道您在这方面遵循的经验法则或惯例。

17
如何仅使用标准库分配对齐的内存?
在工作面试中,我刚刚完成了一次测试,一个问题困扰着我,甚至是使用Google作为参考。我想看看StackOverflow团队可以做什么: 该memset_16aligned函数需要传递一个16字节对齐的指针,否则它将崩溃。 a)您将如何分配1024个字节的内存,并将其与16个字节的边界对齐? b)memset_16aligned执行后释放内存。 { void *mem; void *ptr; // answer a) here memset_16aligned(ptr, 0, 1024); // answer b) here }


9
如何在Python中显式释放内存?
我编写了一个Python程序,该程序作用于大型输入文件,以创建代表三角形的数百万个对象。该算法是: 读取输入文件 处理文件并创建一个三角形列表,以其顶点表示 以OFF格式输出顶点:顶点列表,后跟三角形列表。三角形由顶点列表中的索引表示 在打印出三角形之前先打印出完整的顶点列表的OFF要求意味着在将输出写入文件之前,必须将三角形的列表保留在内存中。同时,由于列表的大小,我遇到了内存错误。 告诉Python我不再需要某些数据并且可以释放它们的最佳方法是什么?


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.