好吧我承认,我又把linux搞死了。。。

中山野鬼 发布于 2013/07/16 00:50
阅读 2K+
收藏 4

写书,为了做个例子,表示malloc不是无尽给予空间的。做了如下代码

#include <stdlib.h>
#define PAGE_SIZE 4096ull
#define PAGE_NUM 1024
#define BLOCK_NUM 512
#define SPACE_SIZE  (PAGE_SIZE * PAGE_NUM * BLOCK_NUM)
#define TEST_TIME 64
int main(int argc,char *argv[]){
   void *p[TEST_TIME];
   int i,j,k;
   char *pc;
   for (i = 0 ; i < TEST_TIME ;i++){
      p[i] = malloc(_SPACE_NAME);
      pc = (char*)(p[i]);
      for (j = 0 ; j < BLOCK_NUM ;j++){
         for (k = 0 ;k < PAGE_NUM ; k++){
              pc[(j * PAGE_NUM + k) * PAGE_SIZE - 1] = (char)i;
// pc[j*PAGE_NUM * PAGE_SIZE - 1] = (char)i;
         }
      }
   }
   return 0;
}
上述写操作,是让机器不要忽悠我。说申请了,实际就是暂时挂个名。

结果,机器死了。准确说,等我写到这个帖子这,有活了,不过哼哧哼哧的超级慢。

如果把上面注释的部分替换一下,就很快结束哈。

不知道win下运行这个代码什么效果。反正linux 没错,就是假死几分钟而已,最后系统报个段错误,不过没蓝屏,该干嘛干嘛。哈哈。

上述程序的意思是申请64个空间,每个空间2个G。注释的意思是表示,不是执行慢,是内存交换慢导致的。

加载中
1
宏哥
宏哥

worthless

the way you spend your life defines your fortune

黑狗
黑狗
回复 @宏哥 : 改成kill或者f**k会是一种什么意境
宏哥
宏哥
回复 @hackee : 正解
hackee
hackee
defines改成determines比较合适:)
张金富
张金富
好久不见宏哥了
1
中山野鬼
中山野鬼

引用来自“少帮主”的答案

p[i] = malloc(_SPACE_NAME);

_SPACE_NAME 啥来的?

这个应该比较正常,内存申请不到导致的换页,压力测试场景经常出现,ubuntu几乎不响应

sorry,写错了。我执行是在ubuntu下折腾的,写帖子,是在mac上凭记忆写的。哈。。。。
0
Duziee
Duziee
蓝屏是微软的专利。。
0
Michael_Yuan
Michael_Yuan

如果是64-bit的OS,然后物理内存超大,那是不是就不会出现慢的问题了呢?

w
wow88188
是.慢,主要是因为内存不够了,出现很多换页.
0
中山野鬼
中山野鬼

引用来自“宏哥”的答案

worthless

the way you spend your life defines your fortune

哈。前面一句不认同,后面一句认同。凡是是积蓄出来的。想做大事,先把储备的小事情,做稳做踏实了。包括现在的写书。。。
0
中山野鬼
中山野鬼

引用来自“Michael_YY”的答案

如果是64-bit的OS,然后物理内存超大,那是不是就不会出现慢的问题了呢?

我就是64bit的linux,物理内存是其次,看虚拟内存了。反正你要把虚拟内存占的几乎差不多,只够os自己转身的,那么就超级慢了。哈。。
Michael_Yuan
Michael_Yuan
我记得操作系统一书中的作者说过一句话,当很久以后,你们的物理内存变得超级大了,虚拟内存这一章节内容,就可以从本书中删除了。 那物理内存超级大时,不需要交换分区了,也不用虚拟内存了,应该就不会卡了吧?你怎么看?
0
少帮主
少帮主

p[i] = malloc(_SPACE_NAME);

_SPACE_NAME 啥来的?

这个应该比较正常,内存申请不到导致的换页,压力测试场景经常出现,ubuntu几乎不响应

0
d
dontmp

1.是否是虚拟机?

2.是否有交换空间?

我这里瞬间断错误. 没有要死的意思. 一般情况下除了添加了有bug的驱动和文件系统进内核, linux很难被搞死.

0
中山野鬼
中山野鬼

引用来自“dontmp”的答案

1.是否是虚拟机?

2.是否有交换空间?

我这里瞬间断错误. 没有要死的意思. 一般情况下除了添加了有bug的驱动和文件系统进内核, linux很难被搞死.

那是我的机器比你的强悍。哈。。内存比你大。。。和虚拟机没有关系。c语言还有虚拟机的概念吗?无非虚拟内存swap区越大,越难死而已。。
0
中山野鬼
中山野鬼

引用来自“dontmp”的答案

1.是否是虚拟机?

2.是否有交换空间?

我这里瞬间断错误. 没有要死的意思. 一般情况下除了添加了有bug的驱动和文件系统进内核, linux很难被搞死.

那是我的机器比你的强悍。哈。。内存比你大。。。和虚拟机没有关系。c语言还有虚拟机的概念吗?无非虚拟内存swap区越大,越难死而已。。
返回顶部
顶部