相关疑难解决方法(0)

我是否施放了malloc的结果?

这个问题,有人建议意见,我应该不会投的结果malloc,即

int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

而不是:

int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

c malloc casting

2318
推荐指数
27
解决办法
22万
查看次数

为什么malloc()或new永远不会返回NULL?

我正在编写一个应用程序,需要大量内存用于缓存目的,正如我在此描述的那样.现在我正在玩一些malloc/new结构来弄清楚我是如何实现它的.我做了一个奇怪的观察:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  while(1) {
    char *foo = (char*)malloc(1024);// new char[1024];
    if(foo == NULL) { 
      printf("Couldn't alloc\n");
      fflush(stdout);
      return 0;
    }
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么永远不会达到printf?如果我的系统运行的内存,malloc的据说返回NULL,因为它是解释在这里.但我总是收到SIGKILL(我正在使用linux ......).

c c++ memory-management

17
推荐指数
2
解决办法
3298
查看次数

java没有正确保留巨大的初始堆大小

我正在使用512GB RAM(由几个AMD Opteron 6212 CPU寻址)的单台机器上工作.目前大约有300GB RAM免费.通过运行运行大型Java计算

java path/to/myApp -Xms280g -Xmx280g > output.txt
Run Code Online (Sandbox Code Playgroud)

应该使Java立即保留280GB,如果失败则会出错.奇怪的是,没有发生错误,但top只显示30.4GB的内存使用量,但它不会崩溃.怎么会发生这种情况?如果无法分配初始堆大小,是不是java应该崩溃?

实际上,一旦30.4GB已满,我就会在达到280GB之前获得OutOfMemory/Java堆空间/ GC开销限制错误.使用250GB或300GB运行会产生类似的30.3GB~30.4GB限制.我在Gentoo Linux上运行带有OpenJDK运行时环境(IcedTea6)的OpenJDK 64位服务器VM,并且有足够的可用RAM(超过300GB).

java memory-management gentoo heap-memory

16
推荐指数
1
解决办法
1389
查看次数

标签 统计

c ×2

memory-management ×2

c++ ×1

casting ×1

gentoo ×1

heap-memory ×1

java ×1

malloc ×1