用您喜欢的编译语言创建简短的源代码,然后将其编译成较大的(不少于104857600字节)可执行文件。该程序必须是可运行的(假设有1GB的可用内存),并且可以执行任何操作(最好是简单的操作,例如hello world)。
鼓励使用非显而易见的技巧。
C中的无聊示例:
int a[1024*1024*25] = { 1 };
int main(){}
如果可以“解释”为什么无法减小可执行文件的大小(例如,实际上以某种方式使用了所有膨胀),则加分了。
用您喜欢的编译语言创建简短的源代码,然后将其编译成较大的(不少于104857600字节)可执行文件。该程序必须是可运行的(假设有1GB的可用内存),并且可以执行任何操作(最好是简单的操作,例如hello world)。
鼓励使用非显而易见的技巧。
C中的无聊示例:
int a[1024*1024*25] = { 1 };
int main(){}
如果可以“解释”为什么无法减小可执行文件的大小(例如,实际上以某种方式使用了所有膨胀),则加分了。
Answers:
好,这是C语言中的另一个,用于模糊定义的奖励积分:
#define a(x) x,x|1,x|2,x|3,x|4,x|5,x|6,x|7
#define b(x) a(x),a(x|8),a(x|16),a(x|24)
#define c(x) b(x),b(x|32),b(x|64),b(x|96)
#define d(x) c(x),c(x|128),c(x|256),c(x|384)
#define e(x) d(x),d(x|512),d(x|4<<8),d(x|6<<8)
#define f(x) e(x),e(x|2048),e(x|4096),e(x|6144)
#define g(x) f(x),f(x|8192),f(x|4<<12),f(x|6<<12)
#define h(x) g(x),g(x|2<<14),g(x|4<<14),g(x|6<<14)
#define i(x) h(x),h(x|2<<16),h(x|4<<16),h(x|6<<16)
#define j(x) i(x),i(x|2<<18),i(x|4<<18),i(x|6<<18)
#define k(x) j(x),j(x|2<<20),j(x|4<<20),j(x|6<<20)
int u,v,z[]={k(0),k(2<<22),k(4<<22),k(6<<22)}
int main(){for(u=v=0;u<1<<25;u++)v|=u!=z[u];return v;}
基本上,在编译时,它会构建一个从0到2 25的整数升序 − 1。在运行时,它会验证该序列确实包含期望值,如果没有,则返回非零错误代码。
附言 如果我的数学正确,则可执行文件应超过100 MiB。编译完成后,我会告诉您确切的大小...
virtual memory exhausted: Cannot allocate memory
。o_O将尝试调整选项,以查看是否可以通过某种方式对其进行编译。
clang
(ICE)和构建tcc
。
-O0
)以最小化对编译器的需求,启用管道(-pipe
)可能会或可能不会有帮助。
不确定这是否短,因为源代码最终会> 30k :)
即-太大而无法引用。这是它的略短版本
using System.Collections.Generic;
class Program
{
static void Main()
{
var a = new List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<List<int>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>();
}
}
我实际编译的代码可以在这里找到:http : //pastebin.com/R5T3e3J0
无需优化即可编译时,这将创建一个〜45KiB的.EXE文件。使用Ngen.exe(本机图像生成器)再次编译它,它变成了惊人的104MiB!
由于CLR通用类型系统是如何工作的,因此可以工作。上面的代码中的每个List <>都会生成一个新的类型声明(通常通过JIT编译,但是Ngen执行AOT编译)。因此,List <int>的一种类型,List <List <int>的另一种类型,依此类推。因此,对于此代码,将创建总共5160个不同的通用列表。
科宝
ID DIVISION.
PROGRAM-ID. BLOAT.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 THE-TEST-STRINGS.
05 FILLER OCCURS 11584 TIMES.
10 TEST-STRING PIC X(11584).
LOCAL-STORAGE SECTION.
01 FIRST-TIME-FLAG PIC X VALUE "Y".
01 DISP-BEFORE-STRING COMP PIC 9(8).
01 LOOP-COUNTER COMP PIC 9(8).
01 START-STRING.
05 FILLER OCCURS 0 TO 11584 TIMES
DEPENDING ON DISP-BEFORE-STRING.
10 FILLER PIC X.
05 THE-SUBSTRING PIC X(12).
01 INITIAL-STRING PIC X(12)
VALUE "HELLO WORLD!".
LINKAGE SECTION.
01 STRING-PARAMETER PIC X(11584).
01 THE-RESULT PIC X.
PROCEDURE DIVISION USING
STRING-PARAMETER
THE-RESULT
.
IF FIRST-TIME-FLAG = "Y"
PERFORM SET-UP-STRINGS
END-IF
PERFORM
VARYING LOOP-COUNTER
FROM 1
BY 1
UNTIL LOOP-COUNTER
GREATER THAN 11584
OR STRING-PARAMETER
EQUAL TO TEST-STRING
( LOOP-COUNTER )
END-PERFORM
IF STRING-PARAMETER
EQUAL TO TEST-STRING ( LOOP-COUNTER )
MOVE "Y" TO THE-RESULT
ELSE
MOVE "N" TO THE-RESULT
END-IF
GOBACK
.
SET-UP-STRINGS.
PERFORM
VARYING LOOP-COUNTER
FROM 0
BY 1
UNTIL LOOP-COUNTER
EQUAL TO 11584
MOVE 11584 TO DISP-BEFORE-STRING
MOVE SPACE TO START-STRING
MOVE LOOP-COUNTER TO DISP-BEFORE-STRING
MOVE INITIAL-STRING TO THE-SUBSTRING
MOVE START-STRING TO TEST-STRING
( LOOP-COUNTER + 1 )
END-PERFORM
MOVE "N" TO FIRST-TIME-FLAG
.
一点知识可能是一件危险的事情。
进行一个大型比较比进行许多小型比较会更快。IBM的Enterprise COBOL(最高4.2版)的最大工作存储量为128MB(5.0版可以具有2GB);如果您需要更多空间,则LOCAL-STORAGE还提供128MB。
任务是确认11584字节的存储空间的值为“ HELLO WORLD!”。某个地方,剩下的就是空间。
这个虚构的程序员决定为此编写一个子程序(以防万一,在其他地方需要它),并包括他们的高性能技术(奖金)。
程序员计算得出11584 * 11584为128MB,因此将WORKING-STORAGE用于巨大的表,将LOCAL-STORAGE用于所需的其他所有东西。
程序员对其进行了编码,并在编译干净时对自己微笑。他们说对了128MB。
测试代码。有用。可能有点慢,但是机器上的负担很重。再次微笑,思考如果没有他们的专业知识水平进行编码会多么缓慢。
WORKING-STORAGE的字节数为134,189,056字节,此外还有很多其他字节。应该足够大。
现实情况是,执行长比较而不是短的比较(执行此处比较)是一种很慢的方法。
甚至更慢,每次调用子程序时都会通过运行时例程初始化的LOCAL-STORAGE,将为每个CALL设置整个128MB。
程序员在表的大小上犯了一个普遍的错误,没有使用LOCAL-STORAGE有足够的空间。长比较可以击败短比较,但只有在实际比较次数减少时才可以。
我考虑过交换LOCAL-STORAGE和WORKING-STORAGE,这几乎不可能有人用这种方式进行编码,所以我没有。在表上放置一个VALUE SPACE(如果它已经在LOCAL-STORAGE中)将初始化该表两次在每个CALL上,因此速度甚至更慢。
如果不重写程序就无法删除Bloat。尽管有一种有用的技术,但是大多数代码都是不好的。
这不是一个真实的例子,但是我可以想象有人这样做,如果有人足够聪明的话:-)
编译完全没有问题。快速运行它被证明是不值得尝试的。
当然,也有一个普通的旧Bug。在“搜索”任务中非常常见的一种。
#BLOAT(104857600)
FUNCTION PBMAIN
PRINT "Hello World"
BEEP
END FUNCTION
import scala.{specialized=>s}
import scala.Specializable.{Everything=>E}
class Printer[@s(E) A, @s(E) B, @s(E) C, @s(E) D, @s(E) E, @s(E) F, @s(E) G, @s(E) H]{
def print(a:A,b:B,c:C)=println(s"$a, $b, $c")
}
object Main extends App{
(new Printer[Int,Int,Int,Int,Int,Int,Int,Int]).print(1,2,3)
}
专门的注释会为每种类型创建一个新类,以防止在类型最终都变成对象时进行装箱。Everything
如果不首先崩溃,它将创建10 ^ 8((由10个类型组成)^(类上的8个类型参数))类文件,每个300-500字节。
这可以通过说性能很重要来解释,特别是如果类实际上做了比打印方法更多的事情时。使用通用的专用方法,而不是将其全部放入声明中,这也将使得更难以注意到
function bigenough(){
var kbytes = $('html').html().length;
return (kbytes>1024*100);
}
while(!bigenough()){
$('html').append('<p>WASSUP</p>');}
在此页面的浏览器控制台中运行此代码,完成后,保存页面。它应导致文件大小大于100 MB。仍在测试中。完成后将发布实际大小。
更新-
保存的页面是结果可执行文件。chrome的v8引擎是编译器。我发布的代码就是程序。我承认编译确实需要很长时间。:D