{"id":493,"date":"2009-09-11T00:16:48","date_gmt":"2009-09-11T00:16:48","guid":{"rendered":"http:\/\/shultays.wordpress.com\/2009\/09\/11\/2-ilginc-olay\/"},"modified":"2009-09-11T00:16:48","modified_gmt":"2009-09-11T00:16:48","slug":"2-ilginc-olay","status":"publish","type":"post","link":"http:\/\/enginmercan.com\/?p=493","title":{"rendered":"2 ilgin\u00e7 olay"},"content":{"rendered":"<p>Uzun s\u00fcredir yazam\u0131yorum, tatil gibi bir \u015fey yapt\u0131k bu g\u00fcn bitti.<\/p>\n<p>Bu g\u00fcn iki tane ilgin\u00e7 \u015fey \u00f6\u011frendim.<\/p>\n<p>Birincisi integer (ve benzer 1 byte dan b\u00fcy\u00fck de\u011fi\u015fken tipleri) haf\u0131za da ters tutuluyormu\u015f. Mesela integer 4 byte ise<\/p>\n<p>[sourcecode=&#8221;cpp&#8221;]<br \/>\nint a = 0x04030201;<br \/>\nchar *c = (char*)&a;<br \/>\nprintf(&#8220;%d %d %d %dn&#8221;, *c, *(c+1), *(c+2), *(c+3));<br \/>\n[\/sourcecode]<\/p>\n<p>ekrana 1 2 3 4 bas\u0131yor. Yani a integer&#8217;\u0131 haf\u0131za 04 03 02 01 olarak de\u011fil de 01 02 03 04 diye tutuluyormu\u015f. Niye b\u00f6yle bir \u015feye gerek duydular bilmiyorum. <\/p>\n<p>Bir di\u011fer \u015fey ise her data tipi her adrese yaz\u0131lamayabiliyormu\u015f. Mesela 4 byte olan bir integer sadece 4 ve kat\u0131 olan adreslerde olabiliyor, 2 byte olan short ise sadece 2 ve kat\u0131na konulabiliyor, 1 byte char ise her adreste olabiliyor.<\/p>\n<p>Mesela bir structure olu\u015fturursak<\/p>\n<p>struct test{<br \/>\n  char a;<br \/>\n  int b;<br \/>\n  char c;<br \/>\n};<\/p>\n<p>bu structure adres 0x1000 de allocate edilirse o adresteki \u015fu \u015fekilde oluyor<\/p>\n<p>a***bbbbc***<\/p>\n<p>ilk \u00f6nce byte olan a koyuluyor, ama ondan sonra b konulam\u0131yor \u00e7\u00fcnk\u00fc 4 ve kat\u0131 adrese denk gelmiyor, 3 tane bo\u015f byte b\u0131rak\u0131l\u0131yor ve sonra 4 bytel\u0131k b integer \u0131 geliyor. daha sonra c geliyor ve ondan sonraki 3 byte gene kullan\u0131lam\u0131yor.<\/p>\n<p>ve sonu\u00e7ta bu structure haf\u0131za&#8217;da 12 byte kapl\u0131yor. E\u011fer biz \u015fu \u015fekilde de\u011fi\u015ftirirsek<\/p>\n<p>struct test{<br \/>\n  char a;<br \/>\n  char c;<br \/>\n  int b;<br \/>\n};<\/p>\n<p>bu sefer haf\u0131zada tutulan yap\u0131 \u015f\u00f6yle oluyor.<\/p>\n<p>ac**bbbb<\/p>\n<p>ve toplam 8 byte l\u0131k yer kapl\u0131yor.<\/p>\n<p>Bu compiler a ba\u011fl\u0131 bir durum tabi. Ak\u0131ll\u0131 compiler lar structure lar\u0131 ikincisi gibi d\u00fczenleyebiliyormu\u015f, fakat dev cpp bu konuyu atlam\u0131\u015f gibi =) Bu olay\u0131n ismi struct padding mi\u015f. <\/p>\n<p>Adreslendirme de bu \u015fekilde bir zorunluluk yok, niye compiler lar b\u00f6yle bir \u015fey yap\u0131yor bilemiyorum, e\u011fer kodumuzun ba\u015f\u0131na<br \/>\n#pragma pack(1)<br \/>\nyazarsak compiler bu olay\u0131 iptal ediyor ve bizim yazd\u0131\u011f\u0131m\u0131z s\u0131rada ve ger\u00e7ek boyutlar\u0131nda haz\u0131rl\u0131yor structure lar\u0131. Ama bir k\u00f6t\u00fc yan\u0131 var ki kullan\u0131l\u0131yor demek (belki de her mimaride \u00e7al\u0131\u015fm\u0131yordur)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uzun s\u00fcredir yazam\u0131yorum, tatil gibi bir \u015fey yapt\u0131k bu g\u00fcn bitti. Bu g\u00fcn iki tane ilgin\u00e7 \u015fey \u00f6\u011frendim. Birincisi integer (ve benzer 1 byte dan b\u00fcy\u00fck de\u011fi\u015fken tipleri) haf\u0131za da ters tutuluyormu\u015f. Mesela integer 4 byte ise [sourcecode=&#8221;cpp&#8221;] int a = 0x04030201; char *c = (char*)&#038;a; printf(&#8220;%d %d %d %dn&#8221;, *c, *(c+1), *(c+2), *(c+3)); [\/sourcecode] [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-493","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts\/493","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=493"}],"version-history":[{"count":0,"href":"http:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts\/493\/revisions"}],"wp:attachment":[{"href":"http:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=493"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=493"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}