小编Vik*_*kas的帖子

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万
查看次数

堆栈内存是否有限制?

我正在经历其中一个主题.程序崩溃是因为它在函数内部声明了一个10 ^ 6的数组.

给出的原因是堆栈上的内存分配失败导致崩溃.

当全局声明相同的数组时,它运行良好.(堆上的内存保存了它).

现在,让我们假设,堆栈向下增长并向上堆积.

我们有:

- -堆 - -

-------------------

- -堆 - -

现在,我相信如果堆栈上的分配失败,它也必须在堆上失败.

所以我的问题是:堆栈大小有限制吗?(超过限制导致程序崩溃).或者我错过了什么?

c heap stack operating-system memory-management

9
推荐指数
3
解决办法
7698
查看次数

共享内存中的Shared_dirty vs Private_dirty

我有使用共享内存的多进程应用程序.我试图在我的应用程序中检测内存泄漏.我在/ proc/$ pid/smap中找到了这个

 2b51cd2b2000-2b53b8aa4000 rw-s 00000000 00:09 17151225                   /dev/zero (deleted)
  Size:           8052680 kB
  Rss:              31608 kB
  Shared_Clean:      1524 kB
  Shared_Dirty:     25736 kB
  Private_Clean:        0 kB
  Private_Dirty:     4348 kB
  Swap:                 0 kB
  Pss:               6945 kB
Run Code Online (Sandbox Code Playgroud)

这是我分配的共享内存.(大小告诉我这是我用mmap分配的内存)

我试图了解内存本身共享的上下文中共享/私有之间的区别.看's'标志.

如果任何人可以在共享内存的上下文中解释Shared_Clean与Private_Clean Shared_Dirty vs Private_Dirty之间的区别.

linux operating-system memory-management shared-memory linux-kernel

6
推荐指数
1
解决办法
2804
查看次数