曾经写过一个尽可能占用内存的程序
// max malloc.c // 作者 @GNU计划 // 编译器 visual studio 2010 // 若有疑问或发现BUG可留言 #include <limits.h> #include <stdlib.h> int main ( void ) { // 此处尝试把i存放在CPU寄存器内 现在的CPU应该可以放得下4bytes 也就是sizeof(unsigned long)的长度 register unsigned long i = ULONG_MAX ; // unsigned long类型的最大值 ( 2^32 ) - 1 long double *pointer ; unsigned char *ptr ; unsigned char j = 7 ; // sizeof ( long double ) - 1 ; //申请一个数组 数组的长度为( 2^32 ) - 1而每个数组单元的类型为long double也就是8bytes 即一次申请 ( 2^32 ) - 1 再乘8bytes的连续内存空间 // while ( NULL == ( pointer = ( long double * ) malloc ( ( i * sizeof ( long double ) ) ) ) while ( !( pointer = ( long double * ) malloc ( i << 3 ) ) ) // i左移3位即i乘2的3次方也就是i * 8而8就是sizeof ( long double ) { if ( i ) // i > 0 --i ; // 若申请空间失败那么减1个数组长度再申请 即减sizeof ( long )的值 也就是减8bytes else // i == 0 如果连一个数组单元空间都申请失败 即连续8bytes的内存空间都申请失败 { // 既然8bytes失败那么申请一个7bytes的内存连续空间 // while ( NULL == ( ptr = ( unsigned char * ) malloc ( j ) ) ) while ( !( ptr = ( unsigned char * ) malloc ( j ) ) ) { if ( j ) // j > 0 --j ; // 若申请失败就再减1byte else // j == 0 // 若1byte的内存空间都申请不了 // 此处是死循环 为何用死循环?就是需要死循环因为一旦程序结束return 0了所有malloc的内存就都被编译器自动释放了 continue ; } } } return 0 ; }
有个QQ群管理员做了个web版的在线C编译服务器 安全措施十分到位 然后我用本程序把他的服务器弄瘫了 囧
后记:曾经写过用递归实现,但一直报错,可能是爆栈了
抱歉让各位见笑了
原文:http://blog.csdn.net/u010518429/article/details/21318549