{"id":220,"date":"2007-08-11T23:48:06","date_gmt":"2007-08-11T21:48:06","guid":{"rendered":"http:\/\/www.mitternachtshacking.de\/blog\/220-ccc-camp-know-your-compiler"},"modified":"2018-05-31T23:03:35","modified_gmt":"2018-05-31T22:03:35","slug":"ccc-camp-know-your-compiler","status":"publish","type":"post","link":"https:\/\/www.mitternachtshacking.de\/blog\/220-ccc-camp-know-your-compiler","title":{"rendered":"CCC Camp: Know your compiler"},"content":{"rendered":"<p><a href=\"http:\/\/blog.fefe.de\/\">Fefes<\/a> <a href=\"http:\/\/events.ccc.de\/camp\/2007\/Fahrplan\/events\/1951.en.html\">ersten Vortrag<\/a> habe ich ja leider verpasst, aber zum <a href=\"http:\/\/events.ccc.de\/camp\/2007\/Fahrplan\/events\/1952.en.html\">zweiten Vortrag<\/a> bin ich dann doch rein, obwohl ich anfangs ein wenig skeptisch war. Ein paar Sachen muss man Fefe jedoch neidlos zugestehen &#8230; was C angeht hat er richtig Ahnung. Die Kernaussage war daf\u00fcr recht schlicht: &#8222;Lesbarer Code ist wichtiger als Optimierung&#8220;.<\/p>\n<p>Don&#8217;t use Inline<\/p>\n<ul>\n<li>das macht der Compiler von alleine wo es sinnvoll ist<\/li>\n<li>in modernen Compilern ist da eine sehr gute Optimierung<\/li>\n<\/ul>\n<p>Range checks<\/p>\n<ul>\n<li>kann man immer machen<\/li>\n<li>optimiert der Compiler gegebenenfalls automatisch weg wo sie unn\u00f6tig sind<\/li>\n<\/ul>\n<p>Strength Reduction<\/p>\n<ul>\n<li>der Compiler macht automatisch shifts draus<\/li>\n<\/ul>\n<p>Sizeof<\/p>\n<ul>\n<li>optimiert der Compiler automatisch, auch bei mehrfachem Einsatz<\/li>\n<li>keine &#8222;magic numbers&#8220; verwenden<\/li>\n<\/ul>\n<p>Tail recursion<\/p>\n<ul>\n<li>kann man in eine nichtrekursive Funktion aufl\u00f6sen<\/li>\n<li>macht der gcc automatisch<\/li>\n<li>nicht icc und sun-cc<\/li>\n<\/ul>\n<p>Aliasing<\/p>\n<ul>\n<li>der Compiler muss hier sehr vorsichtig optimieren<\/li>\n<li>(au\u00dfer der gcc, der optimiert alles weg, aber daf\u00fcr hat Fefe ja einen Bugreport geschrieben)<\/li>\n<li>hier ist manuelle Optimierung m\u00f6glich (aber lohnt sich kaum)<\/li>\n<\/ul>\n<p>Dead Code<\/p>\n<ul>\n<li>Compiler\/Linker kann Code bzw. Objectfiles weglassen<\/li>\n<li>Beim kompilieren von Bibliotheken jede Funktion in ein eigenes Objectfile packen<\/li>\n<\/ul>\n<p>Inline Assembler<\/p>\n<ul>\n<li>braucht man praktisch nie<\/li>\n<li>ist bl\u00f6d zu debuggen<\/li>\n<li>besser nicht (lohnt sich auch kaum bei modernen Compilern)<\/li>\n<\/ul>\n<p>Shifting<\/p>\n<ul>\n<li>schwer in C zu programmieren<\/li>\n<li>optimiert der Compiler automatisch<\/li>\n<\/ul>\n<p>Pre- vs. Post-Operation<\/p>\n<ul>\n<li> auch hier kaum noch Optimierungsm\u00f6glichkeiten<\/li>\n<\/ul>\n<p>Memory Hierarchien<\/p>\n<ul>\n<li>hier l\u00e4sst sich am meisten tunen<\/li>\n<li>ein Cache Miss schl\u00e4gt mit 250 CPU-Cycles Penalty zu buche<\/li>\n<li>das ist meist der teuerste Schaden und am wichtigsten zu optimieren<\/li>\n<\/ul>\n<p>Aha &#8230; also gute Neuigkeiten f\u00fcr Spaghettiprogrammierer wie mich &#8230; einfach weitermachen, der Compiler optimiert das schon. \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fefes ersten Vortrag habe ich ja leider verpasst, aber zum zweiten Vortrag bin ich dann doch rein, obwohl ich anfangs ein wenig skeptisch war. Ein paar Sachen muss man Fefe jedoch neidlos zugestehen &#8230; was C angeht hat er richtig Ahnung. Die Kernaussage war daf\u00fcr recht schlicht: &#8222;Lesbarer Code ist wichtiger als Optimierung&#8220;. Don&#8217;t use [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[13,8],"tags":[],"_links":{"self":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/posts\/220"}],"collection":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/comments?post=220"}],"version-history":[{"count":0,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/posts\/220\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/media?parent=220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/categories?post=220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/tags?post=220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}