Bloatware-Wettbewerb: Produktion von mehr als 100 MiB ausführbarer Datei [geschlossen]

22

Erstellen Sie kurzen Quellcode in Ihrer bevorzugten kompilierten Sprache, der in eine große (nicht weniger als 104857600 Byte) ausführbare Datei kompiliert wird. Das Programm muss ausführbar sein (1 GB freier Speicher vorausgesetzt) ​​und kann alles (vorzugsweise etwas Einfaches wie eine Hallo-Welt).

Die Verwendung nicht offensichtlicher Tricks wird empfohlen.

Langweiliges Beispiel in C:

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

int main(){}

Bonuspunkte, wenn "erklärt" werden kann, warum die ausführbare Datei nicht verkleinert werden kann (dh alles Aufblähen wird tatsächlich auf irgendeine Weise verwendet).

Vi.
quelle
7
Statisch ALLE Bibliotheken verlinken !
Marinus
Das ist der Grund, warum anfangs über 10+ MiB nachgedacht, aber auf 100+ überarbeitet wurde ... Oder bedeutet das, dass alle Bibliotheken im System vorhanden sind?
Vi.
Kann eine HTML-Datei als ausführbare Datei betrachtet werden?
xem
Unwahrscheinlich
.
Dies könnte aktuell bleiben, wenn das Gewinnkriterium in "größte Ausgabedatei" oder so geändert wird, aber dies würde die aktuellen Antworten ungültig machen und dies zu einem Duplikat von mindestens einer anderen Herausforderung machen. Siehe Status des Beliebtheitswettbewerbs Tag
Katze

Antworten:

13

OK, hier ist noch eine in C, die die vage definierten Bonuspunkte anstrebt:

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

Grundsätzlich wird zur Kompilierungszeit eine aufsteigende Folge von Ganzzahlen von 0 bis 2 25 - 1 erstellt. Zur Laufzeit wird überprüft, ob die Folge tatsächlich die erwarteten Werte enthält, und wenn nicht, wird ein Fehlercode ungleich Null zurückgegeben.

Ps. Wenn ich richtig rechnete, sollte die ausführbare Datei über 100 MB groß sein. Ich werde Ihnen die genaue Größe mitteilen, sobald die Kompilierung abgeschlossen ist ...

Ilmari Karonen
quelle
1
Ps. Meine Versuche , die tatsächliche Größe zu überprüfen waren (hoffentlich vorübergehend) zunichte gemacht , was ich vermute , eine eher ungewöhnliche GCC Fehlermeldung sein: virtual memory exhausted: Cannot allocate memory. o_O Versucht, die Optionen zu optimieren, um zu sehen, ob ich sie irgendwie kompilieren kann.
Ilmari Karonen
12
Oh, ich habe dir gerade vorgestellt, wie du auf einem rollenden Stuhl stehst und mit einem anderen Entwickler einen Schwertkampf führst .
Iszi
Kann auch nicht mit clang(ICE) und bauen tcc.
Vi.
1
Deaktivieren Sie alle Optimierungen ( -O0), um die Anforderungen an den Compiler zu minimieren, und aktivieren Sie -pipeggf. Pipes ( ).
dmckee
3
Dieses Kompilierungsproblem erinnert an einen erfolgreichen Eintrag von IOCCC, der seinen eigenen Präprozessor geschrieben hat, um die Richtigkeit des Programms zu überprüfen: ioccc.org/2004/vik2.hint
Christian Semrau
6

C #

Ich bin mir nicht sicher, ob dies als kurz qualifiziert ist, da der Quellcode> 30k war :)

Dh - zu groß um zu zitieren. Hier ist eine etwas verkürzte Version davon

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

Den Code, den ich kompiliert habe, finden Sie hier: http://pastebin.com/R5T3e3J0

Dadurch wird eine EXE-Datei mit ~ 45 KB erstellt, wenn sie ohne Optimierungen kompiliert wird. Kompiliere es erneut mit Ngen.exe (Native Image Generator) und es werden satte 104MiB!

Dies funktioniert aufgrund der Funktionsweise des generischen CLR-Typsystems. Jede Liste <> im obigen Code generiert eine neue Typdeklaration (normalerweise durch JIT-Kompilierung, aber Ngen führt eine AOT-Kompilierung durch). Also ein Typ für List <int>, ein anderer für List <List <int> und so weiter. Für diesen Code werden also insgesamt 5160 verschiedene generische Listen erstellt.

Christian Palmstierna
quelle
1
Was Sie brauchen, ist ein Skript, das Ihr Programm schreibt.
Hildred
Es ist ziemlich trivial, die Größe des Programms zu reduzieren (indem Sie die Verschachtelungsebenen von List entfernen). Kann es so gemacht werden, dass Sie den sich wiederholenden Code nicht einfach entfernen können, ohne die Programmfunktion zu beeinträchtigen?
Vi.
Natürlich können Sie einfach die Verschachtelung entfernen, aber ebenso können Sie im C-Beispiel einfach ein paar #defines entfernen und das Programm verkleinern. Die Art und Weise, wie ich das Erfordernis interpretierte, dass es nicht verkleinert werden kann, war, dass es nicht wegoptimiert werden kann. Wenn Sie nur den Quellcode ändern dürfen, verstehe ich den Punkt nicht ganz. :)
Christian Palmstierna
1
Obwohl zu beachten ist, dass dies wahrscheinlich wegoptimiert werden kann, da die Variable a niemals verwendet wird.
Christian Palmstierna
4

COBOL

   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 
       . 

Ein bisschen Wissen kann gefährlich sein.

Es kann schneller sein, einen großen Vergleich durchzuführen als viele kleine Vergleiche. IBMs Enterprise COBOL (bis Version 4.2) kann einen maximalen ARBEITS-STORAGE von 128 MB haben (Version 5.0 kann 2 GB haben); LOCAL-STORAGE bietet weitere 128 MB, wenn Sie mehr Speicherplatz benötigen.

Die Aufgabe besteht darin, zu bestätigen, dass ein 11584-Byte-Speicher den Wert "HELLO WORLD!" Irgendwo und der Rest ist Platz.

Der fiktive Programmierer beschließt, ein Unterprogramm dafür zu schreiben (nur für den Fall, dass es woanders benötigt wird) und seine Hochleistungstechnik einzubeziehen (Bonus).

Der Programmierer berechnet, dass 11584 * 11584 128 MB groß ist, verwendet also WORKING-STORAGE für eine große Tabelle und LOCAL-STORAGE für alles andere, was benötigt wird.

Der Programmierer verschlüsselt es und lächelt wissentlich, wenn die Kompilierung sauber ist. Sie hatten Recht mit den 128MB.

Testet den Code. Es klappt. Möglicherweise etwas langsam, aber die Maschine ist stark belastet. Lächelt wieder und denkt darüber nach, wie langsam es wäre, wenn sie ohne ihr Expertenwissen codiert würden.

Der WORKING-STORAGE kommt auf 134.189.056 Bytes und es gibt auch ein paar Bytes von anderen Sachen. Sollte groß genug sein.

Die Realität ist, dass ein langer Vergleich anstelle eines kurzen Vergleichs, wie hier implementiert, ein sehr langsamer Weg ist, dies zu tun.

Noch langsamer bewirkt der LOCAL-STORAGE, der bei jedem Aufruf eines Unterprogramms durch Laufzeitroutinen initialisiert wird, dass für jeden CALL die gesamten 128MB eingerichtet werden.

Der Programmierer hat sich in Bezug auf die Größe des Tisches einfach geirrt, es ist genügend Platz vorhanden, ohne LOCAL-STORAGE zu verwenden. Lange Vergleiche können kurze Vergleiche schlagen, aber nur, wenn die tatsächliche Anzahl der Vergleiche verringert wird.

Ich habe darüber nachgedacht, das LOKALE LAGER und das ARBEITSLAGER zu vertauschen. Es ist nur weitaus unwahrscheinlicher, dass jemand es so codiert, also habe ich es nicht getan. Wenn Sie einen VALUE-SPACE-Wert auf den Tisch legen (wenn er sich in LOCAL-STORAGE befunden hätte), würde der Tisch bei jedem CALL zweimal initialisiert , also noch langsamer.

Das Aufblähen kann nicht entfernt werden, ohne das Programm neu zu schreiben. Der meiste Code ist schlecht, obwohl es eine nützliche Technik gibt.

Dies ist kein reales Beispiel, aber ich kann mir vorstellen, dass jemand es tut, wenn dieser jemand klug genug ist :-)

Kompilieren ist überhaupt kein Problem. Es erweist sich schnell als nicht wert, es mit jeder Möglichkeit zu versuchen.

Natürlich gibt es auch einen einfachen alten Bug. Sehr häufig bei der Suche nach Aufgaben.

Bill Woodger
quelle
0

PowerBASIC

#BLOAT(104857600)
FUNCTION PBMAIN
  PRINT "Hello World"
  BEEP
END FUNCTION
Juan Sebastian Lozano
quelle
Es ist vergleichbar mit dem C-Beispiel in der Frage.
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)
}

Die spezialisierte Annotation erstellt für jeden Typ eine neue Klasse, um ein Boxen zu verhindern, wenn die Typen schließlich alle zu Objekten werden. Es werden 10 ^ 8 (( Everythingbesteht aus 10 Typen) ^ (8 Typparameter für die Klasse)) Klassendateien mit jeweils 300-500 Byte erstellt, wenn es nicht zuerst abstürzt.


Dies lässt sich damit erklären, dass die Leistung wichtig ist, insbesondere wenn die Klasse tatsächlich mehr als nur eine Druckmethode hat. Die Verwendung allgemeiner spezialisierter Methoden, anstatt alles in die Erklärung aufzunehmen, würde es auch schwieriger machen, dies zu bemerken

user60561
quelle
Welche Scala-Version brauche ich, um das zu erstellen? 2.9.2 + dfsg-1 mag s "whatever" nicht und weiß nichts über scala.Specializable.
Vi.
Scala 2.10 enthält die interpolierten Zeichenfolgen mit "". Sie können diese Zeichenfolge jedoch entfernen, ohne dass dies Auswirkungen auf die Größe hat. Scala 2.8 verfügt über die Spezialisierungsfunktion. Wenn Sie also die interpolierte Zeichenfolge entfernen, sollte alles einwandfrei funktionieren.
user60561
-2

Javascript

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

Führen Sie diesen Code in der Browserkonsole auf dieser Seite aus und speichern Sie die Seite, wenn Sie fertig sind. es sollte zu einer Dateigröße von mehr als 100 MB führen. Testen noch. Sendet die tatsächliche Größe, sobald dies erledigt ist.

update -
die gespeicherte Seite ist das ausführbare Ergebnis. Die v8-Engine von Chrome ist der Compiler. Und der Code, den ich gepostet habe, ist das Programm. ich gebe zu, dass das kompilieren ziemlich lange dauert. : D

rahulroy9202
quelle
1
Funktioniert nicht wie erforderlich. Die Aufgabe besteht darin, eine ausführbare Datei zu erstellen, die viel zu groß ist und nicht zu viel Speicherplatz beansprucht, wenn sie ausgeführt wird. Auch Überbeanspruchung von jQuery.
John Dvorak
@JanDvorak erstellt eine HTML-Datei mit einer Größe von mehr als 100 MB. In der Frage werden auch keine Einschränkungen für die Verwendung von JQuery angegeben. Das Programm wird noch auf meinem Chrome ausgeführt und die Seite belegt 300 MB Speicher, wie vom Chrome Task Manager gemeldet.
rahulroy9202
Das wird es nicht. Jeder Append, den Sie machen, geschieht nur im Speicher. Es wird nur eine 100-MB-HTML-Datei erstellt, wenn der Benutzer einen Speichervorgang auslöst. Was er vielleicht nicht kann oder will. Auch wenn Sie diesen Prozess des Anhängens von "Kompilierung" aufrufen und es schaffen, den resultierenden HTML-Code als Datei zu speichern, können Sie wahrscheinlich keinen eigenen Compiler schreiben.
John Dvorak
@JanDvorak Ich habe in der Antwort darauf hingewiesen, dass die Seite gespeichert werden muss. hier ist die Seite das ausführbare Ergebnis. Die v8-Engine von Chrome ist der Compiler. Und der Code, den ich gepostet habe, ist das Programm.
rahulroy9202
2
V8 ist ein Compiler, der eine winzige "ausführbare Datei" erzeugt (die niemals auf die Festplatte gelangt) und diese ausführt, die dann eine riesige "Quelldatei" erzeugt (in einer Sprache, die noch nicht einmal kompiliert ist, noch eine Programmiersprache). Wenn Sie das Ergebnis Ihres Skripts als ausführbare Datei (nein ...) bezeichnen, müssen wir Ihr Skript als Compiler bezeichnen, nicht als V8. Es wird nicht als Kompilierung bezeichnet, wenn Ihr Skript dabei ausgeführt wird (Makros verwischen diese Zeile, aber dies ist kein Makro)
John Dvorak