Tag: 内存

UseCompressedOops JVM标志是做什么的,什么时候应该使用它?

热点JVM标志-XX:+UseCompressedOops做什么,我应该什么时候使用它? 在64位Java实例上使用它(而不是使用它)时,我会看到什么样的性能和内存使用差异?

编译器如何在不知道大小的情况下分配内存?

我写了一个C程序,它接受来自用户的整数input,用作整型数组的大小,并使用该值声明给定大小的数组,并通过检查数组大小来确认它。 码: #include <stdio.h> int main(int argc, char const *argv[]) { int n; scanf("%d",&n); int k[n]; printf("%ld",sizeof(k)); return 0; } 令人惊讶的是这是正确的! 该程序能够创build所需大小的数组。 但是所有的静态内存分配都是在编译时完成的,在编译期间n的值是未知的,那么编译器如何才能分配所需大小的内存呢? 如果我们可以像这样分配所需的内存,那么使用malloc()和calloc()进行dynamic分配有什么用处呢?

VirtualAlloc和HeapAlloc有什么区别?

有很多方法可以在Windows环境中分配内存,如VirtualAlloc , HeapAlloc , malloc , new 。 那么,他们之间有什么不同呢?

由于.NET有一个垃圾收集器,为什么我们需要finalizer / destructors / dispose-pattern?

如果我理解正确的话.net运行库将永远在我之后清理。 所以,如果我创build新的对象,并停止在我的代码中引用它们,运行时将清理这些对象并释放它们占用的内存。 既然是这样,那么为什么一些对象需要一个析构函数或者处理方法呢? 当他们不被引用之后,运行时不会清理它们吗?

在C中使用restrict关键字的规则?

我试图了解何时何时不使用C中的restrict关键字,以及在什么情况下它提供了实际的好处。 阅读后,“ 解密限制关键字 ”(提供了一些使用经验的规则),我得到的印象是,当一个函数传递指针时,必须考虑到指向的数据可能重叠的可能性(别名)与任何其他parameter passing给函数。 给定一个函数: foo(int *a, int *b, int *c, int n) { for (int i = 0; i<n; ++i) { b[i] = b[i] + c[i]; a[i] = a[i] + b[i] * c[i]; } } 编译器必须在第二个expression式中重新加载c ,因为可能b和c指向相同的位置。 它也必须等待b被存储之前,它可以加载a相同的原因。 然后它必须等待a被存储,并且必须在下一个循环开始时重新加载b和c 。 如果你这样调用函数: int a[N]; foo(a, a, a, N); 那么你可以看到为什么编译器必须这样做。 有效地使用restrict告诉编译器,你永远不会这样做,这样它可以放弃c的冗余负载,并加载之前b存储。 在另一个SOpost中,Nils Pipenbrinck提供了这个场景的一个工作示例,展示了性能优势。 到目前为止,我已经认识到,对传递给不会被内联的函数的指针使用restrict是个好主意。 显然,如果代码被内联,编译器可以发现指针不重叠。 […]

堆栈是向上还是向下?

我有这段代码在c: int q = 10; int s = 5; int a[3]; printf("Address of a: %d\n", (int)a); printf("Address of a[1]: %d\n", (int)&a[1]); printf("Address of a[2]: %d\n", (int)&a[2]); printf("Address of q: %d\n", (int)&q); printf("Address of s: %d\n", (int)&s); 输出是: Address of a: 2293584 Address of a[1]: 2293588 Address of a[2]: 2293592 Address of q: 2293612 Address of […]

memory_get_peak_usage()与“真实用法”

如果real_usage参数设置为true那么PHP DOCS会说将从系统中获得分配的实际内存大小。 如果它是false它会得到由emalloc()报告的内存 这两个选项中的哪一个返回最大值。 内存分配相对于php.ini中的内存限制值吗? 我想知道剧本到底有多接近。

弱的参考收益

有人可以解释在C#中不同types的引用的主要好处吗? 弱引用 软参考 幻影参考 强烈的参考。 我们有一个消耗大量内存的应用程序,我们正试图确定这是否是一个需要关注的领域。

是“内存不足”一个可恢复的错误?

我已经编程了很长一段时间,我看到的程序在内存不足时试图清理并退出,即优雅地失败。 我不记得上次我看到一个实际上试图恢复并继续正常运行。 如此多的处理依赖于能够成功地分配内存,特别是在垃圾收集语言中,看来内存不足错误应该被归类为不可恢复的。 (不可恢复的错误包括堆栈溢出等)。 什么是令人信服的论据,使其成为一个可恢复的错误?

C内存pipe理

我一直听说在C语言中,你必须真正看你如何pipe理内存。 而且我还在开始学习C语言,但到目前为止,我根本没有必要做任何memory management相关的活动。我总是想象不得不释放variables,做各种丑陋的事情。 但是这似乎并不是这样。 有人能告诉我(代码示例)什么时候你需要做一些“内存pipe理”的例子吗?