标签: memory-management

为什么我需要删除[]?

让我们说我有这样的功能:

int main()
{
    char* str = new char[10];

    for(int i=0;i<5;i++)
    {
        //Do stuff with str
    }

    delete[] str;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  1. str如果我要结束程序,为什么还需要删除?如果我要退出,我不在乎那个记忆是否会到达满是独角兽的土地,对吧?

  2. 这只是好习惯吗?

  3. 它有更深的后果吗?

c++ memory memory-leaks memory-management delete-operator

45
推荐指数
5
解决办法
2681
查看次数

如何在C++中获取Windows下的内存使用率

我试图找出我的应用程序在程序本身内消耗了多少内存.我正在寻找的内存使用量是Windows任务管理器的"进程"选项卡上"内存使用情况"列中报告的数量.

c++ windows memory-management

44
推荐指数
5
解决办法
7万
查看次数

在Python中为列表保留内存?

在使用Python编程时,是否可以为将填充已知数量的项目的列表保留内存,以便在构建列表时不会多次重新分配列表?我查看了文档中的Python列表类型,但没有找到任何似乎这样做的东西.但是,这种类型的列表构建显示在我的代码的几个热点中,所以我想尽可能高效.

编辑:另外,用像Python这样的语言做这样的事情是否有意义?我是一个相当有经验的程序员,但是对Python很陌生并且仍然对它的做事方式有所了解.Python是否在内部将所有对象分配到单独的堆空间中,从而无法尝试最小化分配,或者是直接存储在列表中的诸如整数,浮点数等原语?

python arrays performance memory-management list

44
推荐指数
4
解决办法
3万
查看次数

Linux中的直接内存访问

我正在尝试直接访问嵌入式Linux项目的物理内存,但我不确定如何最好地为我的内容指定内存.

如果我定期启动我的设备,并访问/ dev/mem,我可以轻松地读取和写入我想要的任何地方.但是,在这里,我正在访问可以轻松分配给任何进程的内存; 这是我不想做的

我的/ dev/mem代码是(所有错误检查等删除):

mem_fd = open("/dev/mem", O_RDWR));
mem_p = malloc(SIZE + (PAGE_SIZE - 1));
if ((unsigned long) mem_p % PAGE_SIZE) {
    mem_p += PAGE_SIZE - ((unsigned long) mem_p % PAGE_SIZE);
}
mem_p = (unsigned char *) mmap(mem_p, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, mem_fd, BASE_ADDRESS);
Run Code Online (Sandbox Code Playgroud)

这很有效.但是,我想使用其他人无法触及的记忆.我已经尝试通过使用mem = XXXm启动来限制内核看到的内存量,然后将BASE_ADDRESS设置为高于该值(但低于物理内存),但它似乎并不是一致地访问相同的内存.

根据我在网上看到的内容,我怀疑我可能需要一个使用ioremap()或remap_pfn_range()(或两者兼而有之)的内核模块(可以),但我完全不知道如何; 有人可以帮忙吗?

编辑:我想要的是一种总是访问相同物理内存(比如,1.5MB)的方法,并将该内存放在一边,以便内核不会将其分配给任何其他进程.

我正在尝试重现我们在其他操作系统中的系统(没有内存管理),我可以通过链接器在内存中分配一个空间,并使用类似的方式访问它

*(unsigned char *)0x12345678
Run Code Online (Sandbox Code Playgroud)

EDIT2:我想我应该提供更多细节.此内存空间将用于RAM缓冲区,以用于嵌入式应用程序的高性能日志记录解决方案.在我们拥有的系统中,在软重启期间没有什么可以清除或扰乱物理内存.因此,如果我向物理地址X写入一个位并重新启动系统,则重新启动后仍将设置相同的位.这已经在运行VxWorks的完全相同的硬件上进行了测试(这种逻辑在不同平台上的Nucleus RTOS和OS20上也很好用,FWIW).我的想法是通过直接解决物理内存在Linux中尝试相同的事情; 因此,每次启动时都必须获得相同的地址.

我应该澄清这是针对内核2.6.12和更新的.

EDIT3:这是我的代码,首先是内核模块,然后是用户空间应用程序.

要使用它,我用mem = 95m启动,然后insmod foo-module.ko,然后mknod mknod/dev/foo c 32 0,然后运行foo-user,它会死掉.在gdb下运行表明它在赋值时死了,虽然在gdb中,我无法取消引用从mmap获得的地址(虽然printf可以)

FOO-的module.c

#include <linux/module.h>
#include <linux/config.h>
#include <linux/init.h>
#include …
Run Code Online (Sandbox Code Playgroud)

linux memory embedded memory-management linux-kernel

44
推荐指数
3
解决办法
4万
查看次数

使用NSArray对象引用,我是否显式释放数组中的所有对象或仅释放数组本身?

我的班级有一个充满了物体的NSArray.在我的dealloc方法中,我可以简单地在我的NSArray上调用release,还是我需要迭代数组并首先释放所有对象?

iphone memory-management objective-c

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

malloc可以分配的最大内存

我试图在我的机器(1 Gb RAM 160 Gb HD Windows平台)上计算出最大程度上可以使用多少内存.

我读到malloc可以分配的最大内存仅限于物理内存(堆上).

此外,当程序超过内存消耗到某个级别时,计算机将停止工作,因为其他应用程序无法获得所需的足够内存.

所以要确认一下,我在C写了一个小程序:

int main(){  
    int *p;
    while(1){
        p=(int *)malloc(4);
        if(!p)break;
    }   
}
Run Code Online (Sandbox Code Playgroud)

我希望有一段时间内存分配失败并且循环会中断,但是我的计算机挂起,因为它是一个无限循环.

我等了大约一个小时,最后我不得不强行关闭电脑.

一些问题:

  • malloc是否也从HD分配内存?
  • 上述行为的原因是什么?
  • 为什么在任何时候都没有循环中断?
  • 为什么没有分配失败?

c malloc operating-system memory-management computer-architecture

44
推荐指数
5
解决办法
8万
查看次数

如何在Javascript中为变量分配内存?

我想知道局部变量如何在javascript中分配内存.在C和C++中,局部变量存储在堆栈中.它在javascript中是一样的吗?或者一切都存储在堆中?

javascript memory-management

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

如何在Spark中处理执行程序内存和驱动程序内存?

我对在Spark中处理执行程序内存和驱动程序内存感到困惑.

我的环境设置如下:

  • 内存128 G,16个CPU用于9个VM
  • Centos下
  • Hadoop 2.5.0-cdh5.2.0
  • Spark 1.1.0

输入数据信息:

  • 来自HDFS的3.5 GB数据文件

为了简单的开发,我用独立的集群模式(8个工作线程,20个核心,45.3 G内存)执行我的Python代码spark-submit.现在我想设置执行程序内存或驱动程序内存以进行性能调整.

Spark文档中,执行程序内存的定义是

每个执行程序进程使用的内存量,格式与JVM内存字符串相同(例如512m,2g).

司机记忆怎么样?

memory-management apache-spark

44
推荐指数
2
解决办法
4万
查看次数

64位应用程序的内存使用开销是多少?

从我迄今为止发现的内容可以清楚地看出,针对64位架构编译的程序使用的内存量是其32位替代品的两倍 - https://superuser.com/questions/56540/32-bit-vs- 64位系统.

这是否意味着为64位编译的代码平均使用的RAM是32位版本的两倍?

我不知何故怀疑它,但我想知道真正的开销是什么.我想,小类型,如short,bytechar相同大小的64位架构?我不是很确定byte.鉴于许多应用程序使用大型字符串(如Web浏览器等),char在大多数实现中主要由数组组成,因此开销可能不会太大.

因此,即使数字类型在64位上更大intlong更大,是否会对RAM的使用产生重大影响?

c memory memory-management computer-architecture

44
推荐指数
2
解决办法
5547
查看次数

存储图形对象是个好主意吗?

我目前正在用java编写绘图程序,旨在提供灵活而全面的功能.它起源于我最后一个项目,即我前一天晚上写的.因此,它有大量的bug,我一直在逐一处理(例如,我只能保存空的文件,我的矩形不能画正确但我的圈子会......).

这一次,我一直在尝试为我的程序添加撤消/重做功能.但是,我无法"撤消"我所做的事情.因此,我有一个想法,BufferedImage每次mouseReleased事件被解雇时都保存我的副本.但是,由于某些图像的分辨率为1920x1080,我认为这样效率不高:存储它们可能需要几十亿字节的内存.

为什么我不能简单地用背景颜色来绘制相同的东西以进行撤销的原因是因为我有许多不同的画笔,它们基于画笔Math.random(),并且因为有许多不同的图层(在单个图层中).

然后,我考虑克隆Graphics我用来绘制的对象BufferedImage.像这样:

ArrayList<Graphics> revisions = new ArrayList<Graphics>();

@Override
public void mouseReleased(MouseEvent event) {
    Graphics g = image.createGraphics();
    revisions.add(g);
}
Run Code Online (Sandbox Code Playgroud)

我之前没有这样做,所以我有几个问题:

  • 通过这样做,我仍然会浪费无谓的记忆,比如克隆我的BufferedImages
  • 我必须采用不同的方式吗?

java graphics bufferedimage memory-management awt

44
推荐指数
3
解决办法
2315
查看次数