Tag: 内存

当堆栈和堆相互碰撞时会发生什么

我很想知道堆栈和堆相冲突时会发生什么。 如果有人遇到这种情况,请他们解释一下情况。 提前致谢。

我可以想要访问地址零?

常量0用作C和C ++中的空指针。 但是在“指向特定的固定地址的指针”的问题中,似乎有一些可能的用途来分配固定的地址。 在任何系统中,对于访问地址0,是否有任何可能的低需求任务? 如果存在,那么0是空指针又是如何解决的呢? 如果不是的话,是什么使得确定没有这样的需求?

为什么我需要删除?

可以说我有这样的function: int main() { char* str = new char[10]; for(int i=0;i<5;i++) { //Do stuff with str } delete[] str; return 0; } 为什么我需要删除str如果我要结束程序呢? 如果我只是要退出,我不会在乎这个记忆是否到了一个充满独angular兽的地方,对吗? 这只是一个好习惯吗? 它有更深的后果吗?

如何限制堆大小?

我有时会编写Python程序,很难确定在执行之前要使用多less内存。 因此,我有时会调用一个Python程序,试图分配大量的RAM,导致内核大量交换并降低其他正在运行的进程的性能。 正因为如此,我想限制一个Python堆可以增长多less内存。 当达到限制时,程序可能会崩溃。 什么是最好的方法来做到这一点? 如果重要的话,Cython会写很多代码,所以应该考虑到在那里分配的内存。 我并不是纯粹的Python解决scheme(它不需要是可移植的),所以Linux上的任何东西都可以。

提高性能一致性的方法

在以下示例中,一个线程正在通过消费者正在使用的ByteBuffer发送“消息”。 最好的performance是非常好的,但不一致。 public class Main { public static void main(String… args) throws IOException { for (int i = 0; i < 10; i++) doTest(); } public static void doTest() { final ByteBuffer writeBuffer = ByteBuffer.allocateDirect(64 * 1024); final ByteBuffer readBuffer = writeBuffer.slice(); final AtomicInteger readCount = new PaddedAtomicInteger(); final AtomicInteger writeCount = new PaddedAtomicInteger(); for(int […]

如何解决内存碎片

我们偶尔会遇到问题,由于内存分配失败,长期运行的服务器进程(在Windows Server 2003上运行)已经引发exception。 我们怀疑这些分配由于内存碎片而失败。 因此,我们一直在寻找一些替代的内存分配机制,可以帮助我们,我希望有人能告诉我最好的: 1)使用Windows 低碎片堆 2)jemalloc – 在Firefox 3中使用 3)Doug Lea的malloc 我们的服务器进程是使用跨平台的C ++代码开发的,所以任何解决scheme都将是理想的跨平台(do * nix操作系统遭受这种types的内存碎片?)。 另外,我是否正确地认为LFH现在是Windows Server 2008 / Vista的默认内存分配机制?如果我们的客户只是升级他们的服务器操作系统,我目前的问题是否会“消失”?

如何在C中的内存中存储variables名?

在C中,假设你有一个名为variable_name 。 假设它位于0xaaaaaaaa ,并且在那个内存地址处,您有整数123.换句话说, variable_name包含123。 我正在寻找澄清措辞“ variable_name位于0xaaaaaaaa ”。 编译器如何识别string“variable_name”与该特定内存地址相关联? string“variable_name”是否存储在内存的某个地方? 编译器是否只是在它看到它时将variable_namereplace为0xaaaaaaaa ,如果是的话,是不是必须使用内存才能进行replace?

重置或清除.NET MemoryStream

.NET MemoryStream似乎没有.Reset或.Clear方法。 我正在考虑使用下面的代码来实现这一点: ms.Seek(0, IO.SeekOrigin.Begin) ms.SetLength(0) 什么是清除或重置现有的.NET MemoryStream的正确方法?

string与字符

我有一些来自IBM的幻灯片,命名为: “从Java代码到Java堆:了解应用程序的内存使用情况” ,也就是说,当我们使用String而不是char[] , 单个字符的最大开销是24:1! 但我无法理解这里提到的开销。 任何人都可以帮忙吗? 资源 :

为什么写内存要比读内存慢得多?

这是一个简单的memset带宽基准: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> int main() { unsigned long n, r, i; unsigned char *p; clock_t c0, c1; double elapsed; n = 1000 * 1000 * 1000; /* GB */ r = 100; /* repeat */ p = calloc(n, 1); c0 = clock(); for(i = 0; i < r; ++i) […]