การประกวด Bloatware: ผลิต 100+ MiB ที่ปฏิบัติการได้ [ปิด]


22

สร้างซอร์สโค้ดแบบย่อในภาษาที่คุณชื่นชอบซึ่งรวบรวมเป็นไฟล์ปฏิบัติการขนาดใหญ่ (ไม่น้อยกว่า 104857600 ไบต์) โปรแกรมต้องสามารถรันได้ (สมมติว่ามีหน่วยความจำว่าง 1GB) และสามารถทำอะไรก็ได้ (ต้องการสิ่งที่เรียบง่ายเหมือนโลกสวัสดี)

สนับสนุนการใช้เทคนิคที่ไม่ชัดเจน

ตัวอย่างที่น่าเบื่อใน C:

int a[1024*1024*25] = { 1 };

int main(){}

คะแนนโบนัสหากสามารถ "อธิบาย" ได้ว่าเหตุใดจึงไม่สามารถลดขนาดของการปฏิบัติการได้ (เช่นการขยายตัวทั้งหมดจะถูกใช้จริง)


7
เชื่อมโยงไลบรารีทั้งหมด !
marinus

นั่นเป็นสาเหตุที่เริ่มคิดประมาณ 10+ MiB แต่แก้ไขเป็น 100+ ... หรือมันหมายถึงไลบรารี่ทั้งหมดในระบบ?
วิ

ไฟล์ HTML นั้นถือว่าเป็นไฟล์ที่สามารถเรียกใช้งานได้หรือไม่?
xem

ไม่น่าเป็นไปได้.
Vi

สิ่งนี้สามารถอยู่ในหัวข้อหากเกณฑ์ที่ชนะถูกเปลี่ยนเป็น "ไฟล์ที่ส่งออกที่ใหญ่ที่สุด" หรืออะไรบางอย่าง แต่ที่จะทำให้คำตอบในปัจจุบันและทำให้สิ่งนี้ซ้ำซ้อนอย่างน้อยหนึ่งความท้าทายอื่น ๆ ดูสถานะของแท็กการประกวดความนิยม
cat

คำตอบ:


13

ตกลงนี่เป็นอีกคะแนนหนึ่งใน 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 ที่รันไทม์จะตรวจสอบว่าลำดับนั้นมีค่าที่คาดหวังและหากไม่ส่งคืนรหัสข้อผิดพลาดที่ไม่ใช่ศูนย์

ps ถ้าฉันทำคณิตศาสตร์ของฉันถูกต้องสิ่งที่ปฏิบัติการได้ควรมีค่ามากกว่า 100 MiB ฉันจะแจ้งให้คุณทราบขนาดที่แน่นอนเมื่อรวบรวมเสร็จแล้ว ...


1
ps ความพยายามของฉันเพื่อตรวจสอบขนาดที่แท้จริงได้รับ (หวังว่าชั่วคราว) ขัดขวางด้วยสิ่งที่ผมสงสัยว่าจะเป็นข้อผิดพลาด GCC virtual memory exhausted: Cannot allocate memoryค่อนข้างผิดปกติ: o_O จะพยายามปรับแต่งตัวเลือกเพื่อดูว่าฉันสามารถรวบรวมมันได้หรือไม่
Ilmari Karonen

12
อ้าวผมก็แค่นึกภาพคุณยืนอยู่บนเก้าอี้กลิ้งและมีดาบต่อสู้กับนักพัฒนาอื่น
Iszi

นอกจากนี้ยังไม่สามารถสร้างด้วยclang(ICE) tccและ
วิ

1
ปิดการปรับให้เหมาะสมทั้งหมด ( -O0) เพื่อลดความต้องการคอมไพเลอร์และการเปิดใช้งานไพพ์ ( -pipe) อาจจะช่วยได้หรือไม่ก็ได้
dmckee

3
ปัญหาการรวบรวมนั้นทำให้นึกถึงรายการที่ชนะของ IOCCC ที่เขียน preprocessor ของตัวเองเพื่อตรวจสอบว่าโปรแกรมนั้นถูกต้อง: ioccc.org/2004/vik2.hint
Christian Semrau

6

C #

ไม่แน่ใจว่าสิ่งนี้มีคุณสมบัติสั้นหรือไม่เพราะซอร์สโค้ดจบลงด้วยการ> 30k :)

Ie - ใหญ่เกินกว่าจะพูดได้ นี่เป็นเวอร์ชั่นย่อเล็กน้อย

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

สิ่งนี้จะสร้างไฟล์. EXE ของ ~ 45KiB เมื่อรวบรวมโดยไม่มีการเพิ่มประสิทธิภาพ คอมไพล์อีกครั้งด้วย Ngen.exe (Native Image Generator) และมันจะกลายเป็น 104MiB มหันต์!

สิ่งนี้ทำงานได้เนื่องจากการทำงานของระบบชนิดทั่วไปของ CLR แต่ละรายการ <> ในรหัสข้างต้นจะสร้างการประกาศประเภทใหม่ (โดยปกติผ่านการรวบรวม JIT แต่ Ngen ทำการรวบรวม AOT) ดังนั้นประเภทหนึ่งสำหรับ List <int> อีกประเภทหนึ่งสำหรับ List <List <int>> และอื่น ๆ ดังนั้นสำหรับรหัสนี้จะมีการสร้างรายการทั่วไปทั้งหมด 5160 รายการ


1
สิ่งที่คุณต้องการคือสคริปต์ที่จะเขียนโปรแกรมของคุณ
hildred

มันค่อนข้างเล็กน้อยในการลดขนาดของโปรแกรม (โดยการลบระดับการซ้อนของรายการ) สามารถสร้างขึ้นเพื่อให้คุณไม่สามารถลบรหัสการทำซ้ำได้ง่ายโดยไม่กระทบกับฟังก์ชั่นโปรแกรมหรือไม่
วิ

แน่นอนว่าคุณสามารถลบการซ้อนออกได้ แต่ในตัวอย่าง C คุณสามารถลบ #defines ได้สองสามตัวและทำให้โปรแกรมเล็กลง วิธีที่ฉันตีความข้อกำหนดที่ไม่สามารถลดขนาดได้ก็คือไม่สามารถปรับให้เหมาะสมได้ หากคุณได้รับอนุญาตให้แก้ไขซอร์สโค้ดฉันไม่เห็นประเด็นเลย :)
Christian Palmstierna

1
แม้ว่าควรสังเกตว่าสิ่งนี้สามารถปรับให้เหมาะสมเนื่องจากตัวแปร a ไม่เคยถูกใช้
Christian Palmstierna

4

ภาษาโคบอล

   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 
       . 

ความรู้เล็กน้อยอาจเป็นสิ่งที่อันตราย

มันเร็วกว่าที่จะทำการเปรียบเทียบขนาดใหญ่กว่าการเปรียบเทียบขนาดเล็กจำนวนมาก Enterprise COBOL ของ IBM (สูงถึงเวอร์ชัน 4.2) สามารถมี WORKING-STORAGE สูงสุด 128MB (เวอร์ชัน 5.0 สามารถมี 2GB); LOCAL-STORAGE เสนออีก 128MB ถ้าคุณต้องการพื้นที่เพิ่ม

ภารกิจคือเพื่อยืนยันว่าหน่วยเก็บข้อมูล 11584- ไบต์มีค่า "HELLO WORLD!" ที่อื่นและที่เหลือก็คือที่ว่าง

โปรแกรมเมอร์สมมติว่าจะเขียนโปรแกรมย่อยสำหรับสิ่งนี้ (ในกรณีที่จำเป็นต้องใช้ที่อื่น) และรวมเทคนิคที่มีประสิทธิภาพสูง (โบนัส)

โปรแกรมเมอร์คำนวณว่า 11584 * 11584 เป็น 128MB ดังนั้นใช้ WORKING-STORAGE สำหรับตารางขนาดใหญ่และ LOCAL-STORAGE สำหรับทุกอย่างที่จำเป็น

โปรแกรมเมอร์เขียนโค้ดขึ้นมาและยิ้มอย่างรู้เท่าทันเมื่อคอมไพล์นั้นสะอาด พวกเขาถูกต้องเกี่ยวกับ 128MB

ทดสอบรหัส มันได้ผล. อาจจะช้าไปหน่อย แต่ก็มีภาระงานหนักบนเครื่อง ยิ้มอีกครั้งคิดว่าช้าแค่ไหนถ้าเขียนโดยไม่มีระดับความรู้จากผู้เชี่ยวชาญ

WORKING-STORAGE มีขนาด 134,189,056 bytes และมีอีกสองสามไบต์ในสิ่งอื่น ๆ เช่นกัน ควรมีขนาดใหญ่พอสมควร

ความจริงก็คือการทำการเปรียบเทียบแบบยาวแทนที่จะเป็นการเปรียบเทียบแบบสั้น ๆ ตามที่นำมาใช้ที่นี่เป็นวิธีที่ช้ามากในการทำ

แม้ช้ากว่า LOCAL-STORAGE ซึ่งเริ่มต้นด้วยรูทีนรันไทม์ทุกครั้งที่มีการเรียกโปรแกรมย่อยทำให้ 128MB ทั้งหมดถูกตั้งค่าสำหรับแต่ละ CALL

โปรแกรมเมอร์ผิดธรรมดาเกี่ยวกับขนาดของตารางมีห้องเพียงพอโดยไม่ต้องใช้ LOCAL-STORAGE การเปรียบเทียบแบบยาวสามารถเอาชนะการเปรียบเทียบแบบสั้น ๆ ได้ แต่เมื่อจำนวนการเปรียบเทียบจริงลดลง

ฉันคิดว่าการแลกเปลี่ยน LOCAL-STORAGE และ WORKING-STORAGE รอบ ๆ มันเป็นไปได้ยากที่จะมีคนใช้รหัสในลักษณะนั้นในรอบนั้นดังนั้นฉันจึงไม่ได้ การวาง VALUE SPACE บนโต๊ะ (ถ้าอยู่ใน LOCAL-STORAGE) จะเริ่มต้นตารางสองครั้งบนแต่ละ CALL ดังนั้นช้ากว่า

Bloat ไม่สามารถลบได้โดยไม่ต้องเขียนโปรแกรมใหม่ รหัสส่วนใหญ่ไม่ดี แต่มีเทคนิคที่มีประโยชน์อย่างหนึ่ง

นี่ไม่ใช่ตัวอย่างในชีวิตจริง แต่ฉันสามารถจินตนาการได้ว่ามีคนทำถ้าคนนั้นฉลาดพอ :-)

การรวบรวมไม่มีปัญหาเลย การวิ่งด้วยความเป็นไปได้ทุกอย่างจะพิสูจน์ได้อย่างรวดเร็วว่าไม่ควรลอง

แน่นอนว่ามี Bug ตัวเก่าแบบธรรมดาเช่นกัน งานที่พบบ่อยมากในงาน "ค้นหา"



0

สกาล่า

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 ไบต์หากไม่ได้เกิดปัญหาก่อน


สิ่งนี้สามารถอธิบายได้ด้วยการบอกว่าประสิทธิภาพเป็นสิ่งสำคัญโดยเฉพาะอย่างยิ่งถ้าชั้นเรียนมีมากกว่าวิธีการพิมพ์ การใช้วิธีการพิเศษแบบทั่วไปแทนที่จะวางไว้ทั้งหมดในการประกาศจะทำให้สังเกตเห็นได้ยากขึ้น


ฉันต้องสร้างเวอร์ชั่นสกาล่ารุ่นใด 2.9.2 + dfsg-1 ไม่ชอบ s "อะไรก็ตาม" และไม่รู้เกี่ยวกับสกาล่า
วิ

Scala 2.10 รวมถึงสตริงที่สอดแทรกด้วย s "" แต่คุณสามารถลบสตริงนั้นได้โดยไม่มีผลกระทบกับขนาด Scala 2.8 มีคุณสมบัติพิเศษดังนั้นหากคุณลบสตริงที่สอดแทรกทุกอย่างจะทำงานได้ดี
user60561

-2

จาวาสคริ

function bigenough(){
        var kbytes = $('html').html().length;
        return (kbytes>1024*100);
}
while(!bigenough()){
$('html').append('<p>WASSUP</p>');}

เรียกใช้รหัสนี้ในคอนโซลเบราว์เซอร์ในหน้านี้และเมื่อเสร็จแล้วให้บันทึกหน้า มันควรทำให้ไฟล์มีขนาดใหญ่กว่า 100 MB ยังคงทดสอบ จะโพสต์ขนาดจริงเมื่อทำเสร็จแล้ว

update-
หน้าบันทึกไว้เป็นผลการปฏิบัติการ เครื่องยนต์ v8 ของโครเมี่ยมเป็นคอมไพเลอร์ และรหัสที่ฉันโพสต์คือโปรแกรม ฉันยอมรับว่ามันใช้เวลานานในการรวบรวม : D


1
ไม่ทำงานตามที่ต้องการ ภารกิจคือการสร้างไฟล์เรียกทำงานที่ใหญ่เกินไปไม่ใช่ไฟล์ที่ใช้หน่วยความจำมากเกินไปเมื่อเรียกใช้ รวมถึงการใช้ jQuery มากเกินไป
John Dvorak

@JanDvorak มันจะสร้างไฟล์ HTML ที่มีขนาดใหญ่กว่า 100MB นอกจากนี้คำถามไม่ได้ระบุข้อ จำกัด การใช้ JQuery ใด ๆ โปรแกรมยังคงทำงานบน Chrome ของฉันและหน้านั้นใช้หน่วยความจำ 300mb ตามที่รายงานโดย Chrome Task Manager
rahulroy9202

มันจะไม่ ผนวกทุกครั้งที่คุณเกิดขึ้นในความทรงจำอย่างหมดจด มันจะสร้างไฟล์ HTML ขนาด 100MB เท่านั้นหากผู้ใช้ทริกเกอร์การบันทึก ซึ่งเขาอาจไม่สามารถทำได้และไม่ต้องการ นอกจากนี้แม้ว่าคุณจะเรียกกระบวนการนี้ต่อท้าย "การรวบรวม" และคุณจัดการเพื่อจัดเก็บ HTML ที่เป็นผลลัพธ์เป็นไฟล์ฉันไม่คิดว่าคุณได้รับอนุญาตให้เขียนคอมไพเลอร์ของคุณเอง
John Dvorak

@JanDvorak ฉันได้ชี้ให้เห็นในคำตอบว่าหน้าจะต้องบันทึก ที่นี่หน้าเป็นผลการปฏิบัติการ เครื่องยนต์ v8 ของโครเมี่ยมเป็นคอมไพเลอร์ และรหัสที่ฉันโพสต์คือโปรแกรม
rahulroy9202

2
V8 เป็นคอมไพเลอร์ที่สร้าง "ปฏิบัติการ" เล็ก ๆ (ซึ่งไม่เคยนำไปไว้ในฮาร์ดไดรฟ์) และเรียกใช้งานซึ่งจะดำเนินการเพื่อสร้าง "ซอร์สไฟล์" ขนาดใหญ่ (ในภาษาที่ไม่ได้คอมไพล์หรือแม้แต่ ภาษาโปรแกรม) หากคุณเรียกผลลัพธ์ของสคริปต์ของคุณว่า executable (ไม่ ... ) เราจะต้องเรียกสคริปต์ของคุณว่า compiler ไม่ใช่ V8 จะไม่เรียกว่าการรวบรวมหากสคริปต์ของคุณได้รับการดำเนินการในกระบวนการ (มาโคร kinda blur บรรทัดนั้น แต่นี่ไม่ใช่แมโคร)
John Dvorak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.