Cuộc thi Bloatware: sản xuất hơn 100 MiB thực thi [đã đóng]


22

Tạo mã nguồn ngắn bằng ngôn ngữ được biên dịch yêu thích của bạn để biên dịch thành một tệp thực thi lớn (không dưới 104857600 byte). Chương trình phải có thể chạy được (giả sử 1GB bộ nhớ trống) và có thể làm bất cứ điều gì (thích một cái gì đó đơn giản như một thế giới xin chào).

Sử dụng các thủ thuật không rõ ràng được khuyến khích.

Ví dụ nhàm chán trong C:

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

int main(){}

Điểm thưởng nếu nó có thể được "giải thích" tại sao thực thi không thể giảm kích thước (tức là tất cả sự phình to thực sự được sử dụng bằng cách nào đó).


7
Liên kết tĩnh TẤT CẢ các thư viện!
bến tàu

Đó là lý do ban đầu nghĩ về 10+ MiB, nhưng được sửa đổi thành 100+ ... Hoặc nó có nghĩa là tất cả các thư viện trong hệ thống?
Vi.

Một tập tin HTML có thể được coi là một tập tin thực thi không?
xem

Không có khả năng.󠀠󠀠󠀠
Vi.

Điều này có thể nằm trong chủ đề nếu tiêu chí chiến thắng được thay đổi thành "tệp đầu ra lớn nhất" hoặc một cái gì đó, nhưng điều đó sẽ làm mất hiệu lực các câu trả lời hiện tại và biến điều này thành một bản sao của ít nhất một thách thức khác. Xem Trạng thái của thẻ cuộc thi phổ biến
mèo

Câu trả lời:


13

OK, đây là một điểm khác trong C, dành cho các điểm thưởng được xác định mơ hồ:

#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;}

Về cơ bản, tại thời gian biên dịch, nó xây dựng một chuỗi số nguyên tăng dần từ 0 đến 2 25 - 1. Trong thời gian chạy, nó xác minh rằng chuỗi thực sự chứa các giá trị mong đợi và nếu không, sẽ trả về mã lỗi khác không.

Thi thiên Nếu tôi thực hiện đúng phép toán của mình, số thực thi phải trên 100 MiB. Tôi sẽ cho bạn biết kích thước chính xác sau khi biên dịch xong ...


1
Thi thiên Những nỗ lực của tôi để xác minh kích thước thực tế (hy vọng tạm thời) bị cản trở bởi những gì tôi nghi ngờ là một thông báo lỗi GCC khá bất thường : virtual memory exhausted: Cannot allocate memory. o_O Sẽ cố gắng điều chỉnh các tùy chọn để xem liệu tôi có thể biên dịch nó bằng cách nào đó không.
Ilmari Karonen


Cũng không thể xây dựng với clang(ICE) và tcc.
Vi.

1
Tắt tất cả tối ưu hóa ( -O0) để giảm thiểu các yêu cầu trên trình biên dịch và cho phép các đường ống ( -pipe) có thể hoặc không thể giúp đỡ.
dmckee

3
Vấn đề biên dịch đó nhắc nhở một mục thắng của IOCCC, người đã viết bộ tiền xử lý của riêng mình để xác minh rằng chương trình này là chính xác: ioccc.org/2004/vik2.hint
Christian Semrau

6

C #

Không chắc chắn nếu điều này đủ điều kiện là ngắn, bởi vì mã nguồn kết thúc là> 30k :)

Tức là - quá lớn để trích dẫn. Đây là một phiên bản rút gọn của nó

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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>();
    }
}

Mã tôi thực sự biên dịch có thể được tìm thấy ở đây: http://pastebin.com/R5T3e3J0

Điều này sẽ tạo một tệp .EXE ~ 45KiB khi được biên dịch mà không tối ưu hóa. Biên dịch lại nó với Ngen.exe (Trình tạo ảnh gốc) và nó trở thành một con số khổng lồ 104MiB!

Điều này hoạt động do cách hệ thống loại chung CLR hoạt động. Mỗi và mọi Danh sách <> trong đoạn mã trên sẽ tạo ra một khai báo kiểu mới (thông thường thông qua quá trình biên dịch JIT, nhưng Ngen thực hiện biên dịch AOT). Vì vậy, một loại cho Danh sách <int>, một loại khác cho Danh sách <Danh sách <int >>, v.v. Vì vậy, đối với mã này, tổng cộng 5160 danh sách chung khác nhau sẽ được tạo.


1
Những gì bạn cần là một kịch bản sẽ viết chương trình của bạn.
hildred

Việc giảm kích thước chương trình là khá đơn giản (bằng cách loại bỏ các mức Danh sách lồng nhau). Nó có thể được thực hiện để bạn không thể dễ dàng loại bỏ mã lặp lại mà không ảnh hưởng đến chức năng của chương trình không?
Vi.

Tất nhiên, bạn chỉ có thể loại bỏ việc lồng nhau, nhưng tương tự, trong ví dụ C, bạn có thể chỉ cần xóa một vài #defines và làm cho chương trình nhỏ hơn. Cách tôi diễn giải yêu cầu rằng nó không thể giảm kích thước, là nó không thể được tối ưu hóa. Nếu bạn được phép sửa đổi mã nguồn, tôi không thấy rõ vấn đề. :)
Christian Palmstierna

1
Mặc dù cần lưu ý rằng điều này có thể được tối ưu hóa, vì biến a không bao giờ được sử dụng.
Christian Palmstierna

4

Bạc hà

   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 
       . 

Một chút kiến ​​thức có thể là một điều nguy hiểm.

Có thể nhanh hơn để thực hiện một so sánh lớn hơn rất nhiều so sánh nhỏ; Enterprise COBOL của IBM (tối đa Phiên bản 4.2) có thể có BẢO QUẢN LÀM VIỆC tối đa là 128 MB (Phiên bản 5.0 có thể có 2GB); ĐỊA ĐIỂM-BẢO QUẢN cung cấp thêm 128 MB nếu bạn cần thêm dung lượng.

Nhiệm vụ là xác nhận rằng một bộ lưu trữ 11584 byte có giá trị "HELLO WORLD!" ở đâu đó, và phần còn lại là không gian.

Lập trình viên hư cấu, quyết định viết một chương trình con cho việc này (chỉ trong trường hợp cần thiết ở nơi khác) và bao gồm kỹ thuật hiệu suất cao (tiền thưởng) của họ.

Lập trình viên tính toán rằng 11584 * 11584 là 128 MB, do đó, sử dụng CÔNG VIỆC-BẢO QUẢN cho một bảng lớn và LƯU TRỮ ĐỊA PHƯƠNG cho mọi thứ khác cần thiết.

Lập trình viên mã hóa nó và mỉm cười với chính họ khi biên dịch sạch sẽ. Họ đã đúng về 128MB.

Kiểm tra mã. Nó hoạt động. Có thể hơi chậm, nhưng có một tải nặng trên máy. Lại mỉm cười, nghĩ sẽ chậm đến mức nào nếu được mã hóa mà không có kiến ​​thức chuyên môn.

CÔNG CỤ-BẢO QUẢN có đến 134.189.056 byte và cũng có một vài byte tốt khác. Nên đủ lớn.

Thực tế là làm một so sánh dài thay vì so sánh ngắn, như được thực hiện ở đây, là một cách rất chậm để làm điều đó.

Thậm chí chậm hơn, LƯU TRỮ ĐỊA PHƯƠNG, được khởi tạo bởi các thói quen thời gian chạy mỗi khi chương trình con được gọi, khiến toàn bộ 128 MB được thiết lập cho mỗi CALL.

Các lập trình viên chỉ đơn giản là sai về kích thước của bảng, có đủ chỗ mà không cần sử dụng ĐỊA PHƯƠNG. So sánh dài có thể đánh bại so sánh ngắn, nhưng chỉ khi số lượng so sánh thực tế giảm.

Tôi đã cân nhắc việc hoán đổi ĐỊA ĐIỂM-BẢO QUẢN và LÀM VIỆC-BẢO QUẢN xung quanh, rất ít khả năng ai đó sẽ viết mã theo cách đó, vì vậy tôi đã không làm vậy. Đặt một KHÔNG GIAN GIÁ TRỊ trên bàn (nếu nó đã ở trong ĐỊA ĐIỂM-BẢO QUẢN) sẽ khởi tạo bảng hai lần trên mỗi GỌI, do đó thậm chí còn chậm hơn.

Bloat không thể được gỡ bỏ, mà không cần viết lại chương trình. Hầu hết các mã là xấu, mặc dù có một kỹ thuật hữu ích.

Đây không phải là một ví dụ thực tế, nhưng tôi có thể tưởng tượng ai đó đang làm điều đó, nếu người đó đủ thông minh :-)

Biên dịch là không có vấn đề gì cả. Chạy nó với mọi khả năng nhanh chóng chứng tỏ là không đáng để thử.

Tất nhiên, có một Bug cũ đơn giản là tốt. Một cái rất phổ biến trong các nhiệm vụ "tìm kiếm".


0

PowerBASIC

#BLOAT(104857600)
FUNCTION PBMAIN
  PRINT "Hello World"
  BEEP
END FUNCTION

Nó có thể so sánh với ví dụ C trong câu hỏi.
Vi.

0

Scala

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)
}

Chú thích chuyên biệt tạo ra một lớp mới cho mỗi loại để ngăn chặn quyền anh khi tất cả các loại cuối cùng bị biến thành vật thể. Nó sẽ tạo Everythingcác tệp lớp 10 ^ 8 (( bao gồm 10 loại) ^ (8 loại trên lớp)), mỗi tệp 300-500 byte, nếu nó không bị sập trước.


Điều này có thể được giải thích bằng cách nói rằng hiệu suất rất quan trọng, đặc biệt nếu lớp thực sự đã làm nhiều hơn là có một phương thức để in. Sử dụng các phương pháp chuyên biệt chung chung thay vì đưa tất cả vào khai báo cũng sẽ khiến bạn khó nhận thấy hơn


Phiên bản scala nào tôi cần để xây dựng này? 2.9.2 + dfsg-1 không thích "bất cứ điều gì" và không biết về scala. Đặc biệt.
Vi.

Scala 2.10 bao gồm các chuỗi được nội suy với s "", nhưng bạn có thể xóa chuỗi đó mà không ảnh hưởng đến kích thước. Scala 2.8 có tính năng chuyên môn hóa, vì vậy nếu bạn loại bỏ chuỗi nội suy, mọi thứ sẽ hoạt động tốt.
dùng60561

-2

Javascript

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

Chạy mã này trong Bảng điều khiển trình duyệt trên trang này và khi hoàn tất, hãy lưu trang. nó sẽ dẫn đến kích thước tệp lớn hơn 100 MB. Vẫn đang thử nghiệm. Sẽ đăng kích thước thực tế sau khi thực hiện.

cập nhật-
trang đã lưu là kết quả thực thi. Công cụ v8 của chrome là trình biên dịch. Và mã tôi đã đăng là chương trình. tôi thừa nhận rằng nó mất nhiều thời gian để biên dịch. : D


1
Không hoạt động theo yêu cầu. Nhiệm vụ là tạo một tệp thực thi quá lớn, không phải là tệp tiêu tốn quá nhiều bộ nhớ khi chạy. Ngoài ra, quá lạm dụng jQuery.
John Dvorak

@JanDvorak nó sẽ tạo một tệp HTML với kích thước lớn hơn 100MB. Ngoài ra, Câu hỏi không chỉ định bất kỳ giới hạn sử dụng JQuery nào. Chương trình vẫn đang thực thi trên Chrome của tôi và trang đang tiêu thụ 300mb bộ nhớ theo báo cáo của Trình quản lý tác vụ Chrome.
rahulroy9202

Nó sẽ không. Mỗi lần nối bạn làm hoàn toàn trong bộ nhớ. Nó sẽ chỉ tạo một tệp HTML 100 MB nếu người dùng kích hoạt thao tác lưu. Mà anh có thể không làm được, cũng không muốn. Ngoài ra, ngay cả khi bạn gọi quá trình này là "biên dịch" bạn quản lý để lưu trữ HTML kết quả dưới dạng tệp, tôi không nghĩ bạn được phép viết trình biên dịch của riêng mình.
John Dvorak

@JanDvorak Tôi đã chỉ ra trong câu trả lời rằng trang phải được lưu. Ở đây, trang là kết quả thực thi. Công cụ v8 của chrome là trình biên dịch. Và mã tôi đã đăng là chương trình.
rahulroy9202

2
V8 là một trình biên dịch mà tạo ra một tí hon "thực thi" (mà không bao giờ nhận được nó vào ổ đĩa cứng) và thực thi nó, sau đó tiến hành trên để tạo ra một "nguồn tập tin" khổng lồ (trong một ngôn ngữ mà thậm chí không được biên dịch, cũng không phải một ngôn ngữ lập trình). Nếu bạn gọi kết quả của tập lệnh của mình là tệp thực thi (không ...) thì chúng ta phải gọi tập lệnh của bạn là trình biên dịch, không phải V8. Nó không được gọi là biên dịch nếu tập lệnh của bạn được thực thi trong quy trình (macro có thể làm mờ dòng đó, nhưng đây không phải là macro)
John Dvorak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.