Tag: 内存

通过内联汇编locking内存操作

我是低层次的新手,所以我完全没有意识到你会遇到什么样的问题,我甚至不知道我是否理解了“primefaces”这个词。 现在我正试图通过扩展程序集来对内存操作进行简单的primefaceslocking。 为什么? 为了好奇。 我知道我在这里重新发明轮子,可能会把整个过程简单化。 这个问题? 我在这里提出的代码是否实现了使内存操作既是线程安全又是可重入的目标? 如果有效,为什么? 如果不行,为什么? 还不够好? 我应该例如使用C中的register关键字吗? 我只是想做… 在内存操作之前,locking。 内存操作后,解锁。 代码: volatile int atomic_gate_memory = 0; static inline void atomic_open(volatile int *gate) { asm volatile ( "wait:\n" "cmp %[lock], %[gate]\n" "je wait\n" "mov %[lock], %[gate]\n" : [gate] "=m" (*gate) : [lock] "r" (1) ); } static inline void atomic_close(volatile int *gate) […]

当没有剩余内存时,.Net和Bitmap不会由GC自动处理

我想知道如何分配和处理分配给位图的内存在.NET中工作。 当我在一个函数的循环中做了大量的位图创build并连续调用它时,它会一直运行,直到某些时候Bitmap将不能分配给出指定大小的“无效参数”exception的内存。 如果我打电话给垃圾收集器,而它的工作。 用下面的代码你可以重新编译错误: class BitmapObject { public bool Visible { get { return enb; } set { enb = value; } } private bool enb; private Bitmap bmp; public BitmapObject(int i, bool en) { enb = en; bmp = new Bitmap(i, i); } } class Pool<T> where T : BitmapObject { List<T> preallocatedBitmaps = […]

什么是静态variables的实际内存空间?

静态variables是在程序执行的整个过程中分配的,所以堆栈和堆都不方便。 那它在哪? 应该有一个地方加载?

舍入错误?

在我的课程中,我被告知: 连续值大概在内存中表示,因此使用浮点计算涉及舍入错误。 这些是位模式的微小差异; 因此如果e和f是浮动的,testinge==f是不安全的。 引用Java。 这是真的? 我用double s和float s来比较语句,并且从来没有舍入的问题。 我从来没有读过类似的教科书。 虚拟机肯定是这个原因吗?

堆栈上局部variables分配的顺序

看看这两个function: void function1() { int x; int y; int z; int *ret; } void function2() { char buffer1[4]; char buffer2[4]; char buffer3[4]; int *ret; } 如果我在gdb function1()中断,并打印variables的地址,我得到这个: (gdb) p &x $1 = (int *) 0xbffff380 (gdb) p &y $2 = (int *) 0xbffff384 (gdb) p &z $3 = (int *) 0xbffff388 (gdb) p &ret $4 […]

什么是glibc免费/ malloc / realloc无效的下一个大小/无效指针错误,以及如何解决它?

你最有可能看到这个问题,因为你的问题已经被封闭,作为这个副本。 有关相关问题的中等完整列表,请参阅可能重复的长列表 – C堆内存分配和元堆栈溢出溢出边界 。 示例问题 从免费字符*:无效的下一个大小(快)在2014-04-11由noobie问。 我在一个串联进程后释放一个char* ,但是我收到这个错误: free(): invalid next size (fast): 0x0000000001b86170 这是我的代码: void concat(stringList *list) { char *res = (char*)malloc(sizeof(char*)); strcpy(res, list->head->string); list->tmp = list->head->next; while (list->tmp != NULL) { strcat(res, ","); strcat(res, list->tmp->string); list->tmp = list->tmp->next; } printf("%s\n", res); free(res); } 一般问题 运行我的程序时,我看到如下的错误信息: *** glibc detected *** ./a.out: free(): corrupted […]

什么是Java中的“内部地址”?

在Javadoc for Object.hashCode()中声明 尽可能多地合理实用,由类Object定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但Java™编程语言不需要此实现技术。) 这是一个常见的miconception这与内存地址有关,但它不会改变,恕不另行通知,并且hashCode()不会也不能改变对象。 @ Neet提供了一个很好的答案https://stackoverflow.com/a/565416/57695但我正在寻找更多的细节。 这里举一个例子来说明我的担忧 Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); theUnsafe.setAccessible(true); Unsafe unsafe = (Unsafe) theUnsafe.get(null); for (int t = 0; t < 10; t++) { System.gc(); Object[] objects = new Object[10]; for (int i = 0; i < objects.length; i++) objects[i] = new Object(); for (int i = 0; i < […]

Java堆空间内存不足

我的应用程序目前消耗相当多的内存,因为它正在运行物理模拟。 问题在于,在第五十一次模拟中,java通常会因为内存空间不足而抛出一个错误(我的程序最终会运行数千次模拟)。 有没有反正我不能只增加堆空间,但修改我的程序,以便在每次运行后清空堆空间,以便我可以运行任意数量的模拟? 谢谢 -编辑- 多谢你们。 事实certificate,模拟器软件在每次运行后都没有清除信息,并且我将这些运行全部存储在数组列表中。

在两个进程(C,Windows)之间共享内存

由于我没有find一个问题的答案在这里以前问我在尝试一种不同的方法。 有什么办法可以在两个进程之间共享内存? 第二个过程从注入中获取信息,因为它是一个传统程序,它不再被支持。 我的想法是在那里注入一些代码,在我传递给注入的程序的结构中,将地址(或其他)传递给共享内存,我需要运行的数据位于该共享内存中。 一旦我得到的数据,我将在注入的线程中填充我自己的variables。 这可能吗? 怎么样? 代码表示赞赏。 编辑: 我认为这不清楚,所以我会澄清。 我知道如何注入。 我已经在做了。 这里的问题是将dynamic数据传递给注入。

内存错误和列表限制?

为了科学目的,我需要生成大的(非常)matrix(马尔可夫链)。 我执行微积分,我把20301元素列表(=我matrix的一行)。 我需要在内存中的所有这些数据继续下一步马尔可夫步骤,但如果需要,我可以将它们存储在其他地方(例如文件),即使它会减慢我的马尔可夫链走查。 我的电脑(科学实验室):双氙气6核/ 12线程,12GB内存,操作系统:win64 Traceback (most recent call last): File "my_file.py", line 247, in <module> ListTemp.append(calculus) MemoryError 微积分结果示例:9.233747520008198e-102(是,超过1/9000) 存储第19766个元素时引发错误: ListTemp[19766] 1.4509421012263216e-103 如果我走得更远 Traceback (most recent call last): File "<pyshell#21>", line 1, in <module> ListTemp[19767] IndexError: list index out of range 所以这个列表在19767循环中有一个内存错误。 问题: 列表中是否有内存限制? 这是一个“按列表限制”还是“每个脚本的全局限制”? 如何绕过这些限制? 任何可能的想法? 它会帮助使用numpy,python64吗? 与他们的内存限制是什么? 其他语言呢?