编程语言书籍解释了在堆栈上创建了值类型,并且在堆上创建了引用类型,而没有解释这两者是什么.我还没有看清楚这个问题.我理解堆栈是什么.但,
language-agnostic heap stack memory-management dynamic-memory-allocation
我有以下代码.
#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
怎么会这样?本地变量的内存不能在其功能之外无法访问吗?
请解释JVM中的使用Xms和Xmx参数.它们的默认值是什么?
我在使用std :: list <std :: string>时偶然发现Stack Overflow问题内存泄漏与std :: string,其中一条评论说:
停止使用
new这么多.我看不出你在任何地方使用新的任何理由.您可以使用C++中的值创建对象,这是使用该语言的巨大优势之一.您不必在堆上分配所有内容.不要像Java程序员那样思考.
我不太确定他的意思是什么.为什么要尽可能经常地用C++中的值创建对象,它在内部有什么区别?我误解了答案吗?
如何以编程方式找到我的Android应用程序上使用的内存?
我希望有办法做到这一点.另外,我如何获得手机的免费记忆?
以下是相关程序的摘录.矩阵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了,但问题不在于使用的内存量,它只是执行时间,所以我不知道这会有多大帮助.
我想知道我的Python应用程序的内存使用情况,并且特别想知道哪些代码块/部分或对象占用了大部分内存.Google搜索显示商业广告是Python Memory Validator(仅限Windows).
我没有尝试任何人,所以我想知道哪一个是最好的考虑:
提供大部分细节.
我必须对代码进行最少或不做任何更改.
在C中,我们可以找到的大小int,char等我想知道如何获得物体的大小就像一个字符串,整数,等在Python.
我使用的XML文件包含指定值大小的大小字段.我必须解析这个XML并进行编码.当我想更改特定字段的值时,我将检查该值的大小字段.在这里,我想比较一下我输入的新值是否与XML中的值相同.我需要检查新值的大小.在字符串的情况下,我可以说它的长度.但是在int,float等的情况下我很困惑.
人们用什么技巧来管理交互式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) 我试图使用perfmon Windows实用程序来调试进程中的内存泄漏.
这就是perfmon解释这些术语的方式:
Working Set是此过程的工作集的当前大小(以字节为单位).工作集是过程中线程最近触及的一组内存页面.如果计算机中的可用内存超过阈值,则即使不使用页面,页面也会保留在进程的工作集中.当可用内存低于阈值时,将从工作集中剪裁页面.如果需要它们,它们将在离开主存储器之前被软故障返回工作集.
Virtual Bytes是进程正在使用的虚拟地址空间的当前大小(以字节为单位).使用虚拟地址空间不一定意味着相应地使用磁盘或主存储器页面.虚拟空间是有限的,并且该过程可以限制其加载库的能力.
Private Bytes是此进程分配的内存的当前大小(以字节为单位),无法与其他进程共享.
这些是我的问题:
是否应该测量私有字节,以确定进程是否有任何泄漏,因为它不涉及任何共享库,如果发生任何泄漏,将来自进程本身?
该进程消耗的总内存是多少?它是虚拟字节还是虚拟字节和工作集的总和?
私有字节,工作集和虚拟字节之间是否有任何关系?
还有其他工具可以更好地了解内存使用情况吗?
c++ ×3
heap ×2
java ×2
memory ×2
performance ×2
python ×2
android ×1
c++-faq ×1
debugging ×1
gcc ×1
jvm ×1
memory-leaks ×1
new-operator ×1
object ×1
parameters ×1
profiling ×1
r ×1
sizeof ×1
stack ×1