Buat kode sumber pendek dalam bahasa kompilasi favorit Anda yang mengkompilasi menjadi file yang besar (tidak kurang dari 104857600 byte) yang dapat dieksekusi. Program ini harus dapat dijalankan (dengan asumsi 1GB memori bebas) dan dapat melakukan apa saja (lebih disukai sesuatu yang sederhana seperti hello world).
Penggunaan trik yang tidak jelas sangat dianjurkan.
Contoh membosankan dalam C:
int a[1024*1024*25] = { 1 };
int main(){}
Poin bonus jika dapat "dijelaskan" mengapa executable tidak dapat dikurangi ukurannya (yaitu semua mengasapi sebenarnya digunakan entah bagaimana).
Jawaban:
OK, ini satu lagi di C, pergi untuk poin bonus yang tidak jelas:
Pada dasarnya, pada waktu kompilasi, ia membangun urutan bilangan bulat dari 0 hingga 2 25 - 1. Saat runtime, ia memverifikasi bahwa urutan tersebut memang berisi nilai yang diharapkan, dan jika tidak, mengembalikan kode kesalahan yang tidak nol.
Ps. Jika saya melakukan matematika saya dengan benar, executable harus lebih dari 100 MiB. Saya akan memberi tahu Anda ukuran persisnya setelah kompilasi selesai ...
sumber
virtual memory exhausted: Cannot allocate memory
. o_O Akan mencoba mengubah opsi untuk melihat apakah saya bisa membuatnya untuk dikompilasi.clang
(ICE) dantcc
.-O0
) untuk meminimalkan tuntutan pada kompiler, dan mengaktifkan pipa (-pipe
) mungkin atau mungkin tidak membantu.C #
Tidak yakin apakah ini memenuhi syarat pendek, karena kode sumber berakhir> 30rb :)
Yaitu - terlalu besar untuk dikutip. Ini versi yang agak singkat
Kode yang saya kompilasi sebenarnya dapat ditemukan di sini: http://pastebin.com/R5T3e3J0
Ini akan membuat file .EXE ~ 45KiB ketika dikompilasi tanpa optimasi. Kompilasi lagi dengan Ngen.exe (Native Image Generator) dan itu menjadi 104MiB!
Ini berfungsi karena cara kerja sistem tipe generik CLR. Setiap Daftar <> dalam kode di atas akan menghasilkan deklarasi tipe baru (biasanya melalui kompilasi JIT, tetapi Ngen melakukan kompilasi AOT). Jadi satu jenis untuk Daftar <int>, yang lain untuk Daftar <Daftar <int>>, dan seterusnya. Jadi untuk kode ini, total 5160 daftar generik yang berbeda akan dibuat.
sumber
COBOL
Sedikit pengetahuan bisa menjadi hal yang berbahaya.
Bisa lebih cepat untuk melakukan satu perbandingan besar daripada banyak perbandingan kecil; Enterprise COBOL IBM (hingga Versi 4.2) dapat memiliki PENYIMPANAN KERJA maksimum 128 MB (Versi 5.0 dapat memiliki 2GB); LOCAL-STORAGE menawarkan 128MB lebih lanjut jika Anda membutuhkan lebih banyak ruang.
Tugasnya adalah untuk mengkonfirmasi bahwa sepotong penyimpanan 11584 byte memiliki nilai "HELLO WORLD!" suatu tempat, dan sisanya adalah ruang.
Programmer, fiktif, memutuskan untuk menulis sub-program untuk ini (kalau-kalau diperlukan di tempat lain), dan untuk memasukkan teknik kinerja tinggi (bonus).
Programmer menghitung bahwa 11584 * 11584 adalah 128MB, jadi gunakan WORKING-STORAGE untuk tabel besar, dan LOCAL-STORAGE untuk semua hal lain yang diperlukan.
Programmer mengkodekannya, dan tersenyum dengan sadar ketika kompilasi bersih. Mereka benar tentang 128MB.
Menguji kodenya. Berhasil. Mungkin agak lambat, tetapi ada beban berat pada mesin. Tersenyum lagi, berpikir betapa lambatnya jika dikodekan tanpa tingkat pengetahuan ahli mereka.
STORAGE KERJA hadir di 134.189.056 byte, dan ada beberapa byte yang baik dari hal-hal lain juga. Harus cukup besar.
Kenyataannya adalah melakukan perbandingan panjang dan bukan perbandingan singkat, seperti yang diterapkan di sini, adalah cara yang sangat lambat untuk melakukannya.
Bahkan lebih lambat, LOCAL-STORAGE, yang diinisialisasi dengan run-time rutin setiap kali sebuah sub-program dipanggil, menyebabkan 128MB seluruh diatur untuk setiap PANGGILAN.
Programmer hanya salah tentang ukuran tabel, ada cukup ruang tanpa menggunakan PENYIMPANAN LOKAL. Perbandingan panjang dapat mengalahkan perbandingan pendek, tetapi hanya ketika jumlah aktual perbandingan dikurangi.
Saya mempertimbangkan untuk menukar sekitar PENYIMPANAN LOKAL dan PENYIMPANAN KERJA di sekitar, itu jauh lebih kecil kemungkinan seseorang akan mengkodekannya seperti itu, jadi saya tidak melakukannya. Menempatkan VALUE SPACE di atas meja (jika sudah di LOCAL-STORAGE) akan menginisialisasi tabel dua kali pada setiap CALL, jadi lebih lambat.
The Bloat tidak dapat dihapus, tanpa menulis ulang program. Sebagian besar kode itu buruk, meskipun ada satu teknik yang berguna.
Ini bukan contoh kehidupan nyata, tapi saya bisa membayangkan seseorang melakukannya, jika seseorang itu cukup pintar :-)
Kompilasi sama sekali bukan masalah. Menjalankannya dengan setiap kemungkinan dengan cepat terbukti tidak layak dicoba.
Tentu saja, ada Bug tua biasa juga. Yang sangat umum dalam tugas "pencarian".
sumber
PowerBASIC
sumber
Scala
Anotasi khusus membuat kelas baru untuk setiap jenis untuk mencegah tinju ketika semua jenis akhirnya bisa berubah menjadi objek. Ini akan membuat 10 ^ 8 ((
Everything
terdiri dari 10 jenis) ^ (8 parameter parameter pada kelas)) file kelas, masing-masing 300-500 byte, jika tidak crash dulu.Ini dapat dijelaskan dengan mengatakan bahwa kinerja itu penting, terutama jika kelas benar-benar melakukan lebih dari sekadar memiliki metode untuk mencetak. Menggunakan metode khusus generik alih-alih memasukkan semuanya ke dalam deklarasi juga akan membuat lebih sulit untuk diperhatikan
sumber
Javascript
Jalankan kode ini di Browser Console di halaman ini dan saat selesai, simpan halaman tersebut. itu harus menghasilkan ukuran file lebih besar dari 100 MB. Masih menguji. Akan memposting ukuran sebenarnya setelah selesai.
pembaruan
- halaman yang disimpan adalah hasil yang dapat dieksekusi. Mesin v8 chrome adalah kompiler. Dan kode yang saya posting adalah programnya. saya akui bahwa memang butuh waktu lama untuk dikompilasi. : D
sumber