标签: memory-management

堆栈和堆的内容和位置是什么?

编程语言书籍解释了在堆栈上创建了值类型,并且在堆上创建了引用类型,而没有解释这两者是什么.我还没有看清楚这个问题.我理解堆栈是什么.但,

  • 它们在哪里和它们(物理上在真实计算机的记忆中)?
  • 它们在多大程度上受操作系统或语言运行时控制?
  • 它们的范围是什么?
  • 是什么决定了它们的大小?
  • 是什么让一个更快?

language-agnostic heap stack memory-management dynamic-memory-allocation

7847
推荐指数
27
解决办法
145万
查看次数

可以在其范围之外访问局部变量的内存吗?

我有以下代码.

#include <iostream>

int * foo()
{
    int a = 5;
    return &a;
}

int main()
{
    int* p = foo();
    std::cout << *p;
    *p = 8;
    std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)

而代码只是运行而没有运行时异常!

输出是 58

怎么会这样?本地变量的内存不能在其功能之外无法访问吗?

c++ memory-management local-variables dangling-pointer

990
推荐指数
19
解决办法
26万
查看次数

启动JVM时,Xms和Xmx参数是什么?

请解释JVM中的使用XmsXmx参数.它们的默认值是什么?

java parameters jvm memory-management

911
推荐指数
5
解决办法
172万
查看次数

为什么C++程序员应该尽量减少"新"的使用?

在使用std :: list <std :: string>时偶然发现Stack Overflow问题内存泄漏与std :: string,其中一条评论说:

停止使用new这么多.我看不出你在任何地方使用新的任何理由.您可以使用C++中的值创建对象,这是使用该语言的巨大优势之一.您不必在堆上分配所有内容.不要像Java程序员那样思考.

我不太确定他的意思是什么.为什么要尽可能经常地用C++中的值创建对象,它在内部有什么区别?我误解了答案吗?

c++ heap memory-management c++-faq new-operator

833
推荐指数
13
解决办法
12万
查看次数

如何在Android中发现我的应用程序的内存使用情况?

如何以编程方式找到我的Android应用程序上使用的内存?

我希望有办法做到这一点.另外,我如何获得手机的免费记忆?

java memory android memory-management

787
推荐指数
7
解决办法
30万
查看次数

为什么我的程序在完全循环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;
}
Run Code Online (Sandbox Code Playgroud)

这就是该计划的全部内容.为了完整起见,以下是之前的内容.没有代码.如您所见,它只是初始化.

#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;
Run Code Online (Sandbox Code Playgroud)

基本上,当SIZE是2048的倍数时,此程序很慢,例如执行时间:

SIZE = 8191: 3.44 secs
SIZE = 8192: 7.20 secs
SIZE = 8193: 3.18 secs
Run Code Online (Sandbox Code Playgroud)

编译器是GCC.据我所知,这是因为内存管理,但我对这个主题并不太了解,这就是我在这里问的原因.

另外如何解决这个问题会很好,但如果有人能够解释这些执行时间,我已经足够开心了.

我已经知道malloc/free了,但问题不在于使用的内存量,它只是执行时间,所以我不知道这会有多大帮助.

c++ performance gcc memory-management

745
推荐指数
2
解决办法
9万
查看次数

建议使用哪种Python内存分析器?

我想知道我的Python应用程序的内存使用情况,并且特别想知道哪些代码块/部分或对象占用了大部分内存.Google搜索显示商业广告是Python Memory Validator(仅限Windows).

开源的是PySizerHeapy.

我没有尝试任何人,所以我想知道哪一个是最好的考虑:

  1. 提供大部分细节.

  2. 我必须对代码进行最少或不做任何更改.

python performance profiling memory-management

657
推荐指数
8
解决办法
22万
查看次数

如何在Python中确定对象的大小?

在C中,我们可以找到的大小int,char等我想知道如何获得物体的大小就像一个字符串,整数,等在Python.

相关问题:Python列表(元组)中每个元素有多少字节?

我使用的XML文件包含指定值大小的大小字段.我必须解析这个XML并进行编码.当我想更改特定字段的值时,我将检查该值的大小字段.在这里,我想比较一下我输入的新值是否与XML中的值相同.我需要检查新值的大小.在字符串的情况下,我可以说它的长度.但是在int,float等的情况下我很困惑.

python memory memory-management object sizeof

606
推荐指数
12
解决办法
53万
查看次数

诀窍来管理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 <- ifelse(is.na(obj.class), obj.mode, obj.class)
    obj.size <- napply(names, object.size)
    obj.dim <- t(napply(names, function(x)
                        as.numeric(dim(x))[1:2]))
    vec <- is.na(obj.dim)[, 1] & (obj.type != "function")
    obj.dim[vec, 1] <- napply(names, length)[vec]
    out <- data.frame(obj.type, …
Run Code Online (Sandbox Code Playgroud)

memory-management r

480
推荐指数
19
解决办法
10万
查看次数

什么是专用字节,虚拟字节,工作集?

我试图使用perfmon Windows实用程序来调试进程中的内存泄漏.

这就是perfmon解释这些术语的方式:

Working Set是此过程的工作集的当前大小(以字节为单位).工作集是过程中线程最近触及的一组内存页面.如果计算机中的可用内存超过阈值,则即使不使用页面,页面也会保留在进程的工作集中.当可用内存低于阈值时,将从工作集中剪裁页面.如果需要它们,它们将在离开主存储器之前被软故障返回工作集.

Virtual Bytes是进程正在使用的虚拟地址空间的当前大小(以字节为单位).使用虚拟地址空间不一定意味着相应地使用磁盘或主存储器页面.虚拟空间是有限的,并且该过程可以限制其加载库的能力.

Private Bytes是此进程分配的内存的当前大小(以字节为单位),无法与其他进程共享.

这些是我的问题:

是否应该测量私有字节,以确定进程是否有任何泄漏,因为它不涉及任何共享库,如果发生任何泄漏,将来自进程本身?

该进程消耗的总内存是多少?它是虚拟字节还是虚拟字节和工作集的总和?

私有字节,工作集和虚拟字节之间是否有任何关系?

还有其他工具可以更好地了解内存使用情况吗?

debugging operating-system memory-leaks memory-management

463
推荐指数
4
解决办法
27万
查看次数