{"id":648,"date":"2011-04-04T21:02:40","date_gmt":"2011-04-04T20:02:40","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=648"},"modified":"2011-04-04T21:05:14","modified_gmt":"2011-04-04T20:05:14","slug":"etwas-uber-c-assember-und-performance","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=648","title":{"rendered":"Etwas \u00fcber C, Assember und Performance"},"content":{"rendered":"<p>Angenommen, ihr habt folgenden Code<\/p>\n<pre>\r\nint main()\r\n{\r\n\r\n  int i = 0;\r\n  for(; i < 255; i++)\r\n  {\r\n    if(i != 10)\r\n      printf(\"a\");\r\n    else\r\n      printf(\"b\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n<\/pre>\n<p>Angenommen, man \u00e4ndert if(i != 10) zu if(i == 10). L\u00e4uft der Code schneller? Bei diesem Beispiel: Nein.<\/p>\n<p>Ich habe mir den erzeugten ASM Code ausgeben lassen (--save-temps) und die Anzahl der Vergleiche und Spr\u00fcnge verglichen. Beide male jeweils zwei. Schaltet man nun die Compileroptimierung ein (-O3), \u00e4ndert sich der Code gewaltig. Es gibt nun ein Vergleich und ein Sprung f\u00fcr den Fall wenn die Variable i gleich 10 ist und zwei Vergleiche und ein Sprung wenn sie ungleich 10 ist. \u00c4ndert man den Code nun entsprechend, bleibt das Ergebnis gleich.<\/p>\n<p>Wer es nicht glaub kann ja gern selbst den ASM Code sich anschauen ;) Das gilt aber nur f\u00fcr exakt dieses Beispiel. Schaltet man nun irgendwelche andere Optimierungen ein, oder benutzt Arrays statt der Laufvariable i, sieht alles wieder anders aus.<\/p>\n<p>Interessant w\u00e4re es mal selbst Assembler Code zu schreiben der diese Aufgabe mit m\u00f6glichst wenig Vergleiche und Spr\u00fcnge in der Summe \u00fcber die gesamte Laufzeit bew\u00e4ltigt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Angenommen, ihr habt folgenden Code int main() { int i = 0; for(; i < 255; i++) { if(i != 10) printf(\"a\"); else printf(\"b\"); } return 0; } Angenommen, man \u00e4ndert if(i != 10) zu if(i == 10). L\u00e4uft der Code schneller? Bei diesem Beispiel: Nein. Ich habe mir den erzeugten ASM Code ausgeben lassen [&hellip;]\n<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[24,14],"class_list":["post-648","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-asm","tag-c"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=648"}],"version-history":[{"count":7,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/648\/revisions"}],"predecessor-version":[{"id":654,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/648\/revisions\/654"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=648"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}