Buat program C pendek yang membutuhkan waktu sangat lama untuk dikompilasi dengan gcc. Entri akan dinilai dengan menghitung waktu kompilasi kemudian mengurangi waktu kompilasi program referensi.
Aturan
- Setiap fitur bahasa C atau ekstensi gcc
- gcc 4.2.1
code-challenge
c
charliehorse55
sumber
sumber
Jawaban:
sumber
main(){char*z=j;}
menjadikan ini program yang valid./Zm
akan memperbaikinyaBaik jawaban Charlie maupun yang sebelumnya saya kerjakan dengan prinsip membiarkan pra-prosesor menulis banyak kode, tetapi mereka kebanyakan menggunakan pra-prosesor itu sendiri, lexer (ide bagus karena langkah ini biasanya lambat) dan pengurai. Milik saya juga mencoba untuk melakukan langkah-langkah optimasi dan pembuatan kode, tetapi jelas tidak mendapatkan banyak di sana.
Berpikir tentang cara kerja c compiler biasa, saya menyadari bahwa kami tidak memberikan kode terkait tabel simbol apa pun untuk dilakukan. Entri ini merupakan upaya untuk memperbaiki itu. Seharusnya mengingatkan pada objek-orientasi dasar dalam implementasi c, tetapi tidak melakukan sesuatu yang menarik: membenarkan teknik ekspansi pra-prosesor untuk mendeklarasikan dan secara sepele (dan salah) menginisialisasi sekelompok objek. Objek yang menggunakan tipe rumit, pada berbagai tingkat ruang lingkup, saling membayangi di berbagai penghapusan. Seharusnya memberi tabel simbol kerja nyata.
Waktu kompilasi pada mesin saya lebih dari 4 detik dengan
-O3
dan lebih dari 1 detik tanpa optimasi.Jelas langkah selanjutnya adalah menyelesaikan implementasi OO untuk kelas BCD dan melakukan kembali perhitungan pi menggunakannya sehingga saya mendapatkan kedua efek berjalan keras.
sumber
Berikut adalah tema eksponensial-preprocessor-ekspansi yang melakukan sesuatu yang menarik minimal: menghitung dua pendekatan ke pi dengan metode seri dan membandingkannya dengan nilai dalam
math.h
dan mantra yang biasa.Tidak disatukan.
Asumsikan bahwa Anda menggunakan
gcc
danglibc
dan mungkin atau mungkin tidak bekerja dengan pengaturan lain. Diperlukan waktu prosesor sekitar 1,0-1,1 detik (dievaluasi dengantime (1)
) untuk dikompilasi dengan-03
1 pada 2,4 GHz Intel Core 2 Duo MacBook saya. Kompilasi default membutuhkan waktu prosesor sekitar 0,4 detik.Sayangnya, saya tidak dapat meminta gcc untuk mengevaluasi
pow
atautgamma
pada waktu kompiler, yang akan sangat membantu.Ketika Anda menjalankannya, hasilnya adalah:
yang menunjukkan betapa lambatnya seri naif bertemu.
1 Untuk mendapatkan sebanyak mungkin lipat dan eliminasi sub-ekspresi sebanyak mungkin.
sumber