ÊÑ¿ô¤Î¥¹¥³¡¼¥×¤È¥á¥â¥ê´ÉÍý¤Ë¤Ä¤¤¤Æ

ÊÑ¿ô¤Î¼÷Ì¿¤È¥á¥â¥ê¤Î̵Â̻Ȥ¤¤ò¸º¤é¤¹¤³¤È¤Ç
»È¤¨¤ë¥á¥â¥ê¤âÁý¤¨¤ë¤·¡¢¼Â¹Ô®Å٤⮤¯¤Ê¤Ã¤Æ¥¦¥Þ¡¼
¤¢¤È¡¢¼÷Ì¿¤ä¥á¥â¥ê¤Î´ÉÍý¤¬¤ï¤«¤ë¤è¤¦¤Ë¤Ê¤ë¤È¥³¡¼¥Ç¥£¥ó¥°¤â¤ä¤ê¤ä¤¹¤¯¤Ê¤ë¤·
¡Ê¥¯¥é¥¹¤È¤«¹½Â¤ÂΤγµÇ°¤Ã¤ÆÆͤ­µÍ¤á¤ë¤È¤½¤ì¤Ê¤ó¤À¤è¤Í¡Ë
Æäˡ¢¥²¡¼¥à¤À¤È®Å٤äÆÂç»ö¤À¤·

­¡ ÊÑ¿ô¤Î¼÷Ì¿
static ÄêµÁ
¥°¥í¡¼¥Ð¥ë¶õ´Ö¤ËÄêµÁ¤¹¤ë¤È
ÊÑ¿ô¤Î¼÷Ì¿¤Ï¥×¥í¥°¥é¥à³«»Ï»þ¤Ë¥á¥â¥ê³ÎÊݤµ¤ì½ªÎ»¤Þ¤Ç»Ä¤ê³¤±¤ë
¤¿¤À¤·¡¢¥á¥â¥ê¤ò¾ï¤ËÊÝ»ý¤·Â³¤±¤ë¤Î¤Ç
¥á¥â¥êÍÆÎÌÀ©¸Â¤¬¤¢¤ë¾ì¹ç¤Ï¤¢¤Þ¤ê¤è¤¯¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤

¥í¡¼¥«¥ë¤ÊÊÑ¿ô¤Î¾ì¹ç¡¢¥Ö¥í¥Ã¥¯¡Ê¥«¥®¥«¥Ã¥³¡Ë¤ò¤Ì¤±¤ë¤Þ¤Ç¤¬ÊÑ¿ô¤Î¼÷Ì¿
¤¿¤È¤¨¤ÐÉáÄ̤˻ȤäƤ¤¤ëint¤ÏVC¾å¤Ç¤ÏÀµ¼°¤Ë¤Ïauto int¤Ç¤¢¤ê¡¢auto¤Ï¾Êά¤µ¤ì¤Æ¤¤¤ë
¡Ê¤«¤Ã¤³Æâ¤Ç¼÷Ì¿¤ò»ý¤Ä¼«Æ°ÊÑ¿ô¤È¤¤¤¦°ÕÌ£¡Ë
¤Û¤«¤Ë¤âextern¤Ê¤É¤ÏÊ£¿ô¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ë¤Þ¤¿¤¬¤ê¡¢¶¦Ä̤·¤Æ»È¤¨¤ë¹­°èÊÑ¿ô

{
 int a;
 {
  int b;
 }// ¢«b¤Î¼÷Ì¿
}//¢«a¤Î¼÷Ì¿

­¢placement new
Ä̾ưŪ¤Ê¥á¥â¥ê¤ò³ÎÊݤ¹¤ë¤Ë¤Ïmalloc¤änew¤ò»È¤¦¤¬
placement new¤Ï¤â¤È¤«¤é³ä¤êÅö¤Æ¤é¤ì¤¿¥á¥â¥êÎΰ褫¤éɬÍפʥǡ¼¥¿¥µ¥¤¥ºÊ¬¡¢
¥á¥â¥ê¤ò³ÎÊݤ¹¤ëÊýË¡
¥á¥â¥ê¤ò³ÎÊݤ¹¤ëÂоݡÊÇÛÎó¤Ê¤É¡Ë¤ò¥á¥â¥ê¥×¡¼¥ë¤È¤¤¤¦
Ä̾ï¤ÎưŪ³ÎÊݤȰ㤤¡¢¤¹¤Ç¤Ë³ä¤êÅö¤Æ¤Æ¤¤¤ëÎΰ褫¤é
¶õ¤­¥á¥â¥ê¤ò¼è¤ì¤ë¾ì½ê¤òõº÷¤¹¤ë¤¿¤á¡¢new¤È°ã¤¤¹â®
¤Þ¤¿¡¢¥á¥â¥ê²òÊü¤Ï¤â¤È¤«¤é³ä¤êÅö¤Æ¤é¤ì¤Æ¤¤¤ëÎΰè¤ò»È¤¦¤Î¤Ç
new¤È°ã¤¤¡¢delete¤·¤Ê¤¯¤Æ¤â¤è¤¤

    // placement new
   #include <new>    // new ¥Ø¥Ã¥À¡¼¤ÏɬÍ×
   #include <iostream>
   #include <cstring>
   
   char global_area[1000]; // ¥°¥í¡¼¥Ð¥ëÎΰè
   
   int main()
   {
       for(int i = 0;i < 1000;++i){
           global_area[i] = 'a';
       }

       // ¥°¥í¡¼¥Ð¥ëÎΰè¤Ë¡¢char11¸Äʬ¤ÎÎΰè¤ò³ÎÊݤ·¤Æ¡¢¤½¤³¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤òÆÀ¤ë
       char* p = new(global_area) char[11];
       ::memcpy( p, "0123456789\0" ,sizeof(char) * 11);
   
       // Ʊ¤¸·ë²Ì¤¬½ÐÎϤµ¤ì¤ë¤³¤È¤ò³Îǧ¤¹¤ë
       std::cout << p << std::endl;
       std::cout << &global_area[11] << std::endl;
   
       return 0;
   } 

­£¥¢¥é¥¤¥á¥ó¥È
½èÍý·Ï¤´¤È¤Ë·×»»¤¬¤·¤ä¤¹¤¤¤È¤¤¤¦Ã±°Ì¤¬·è¤Þ¤Ã¤Æ¤¤¤ë
¤¿¤È¤¨¤Ð32bit¥Þ¥·¥ó¤Ç¤¢¤ì¤Ð¡¢Æ±»þ¤Ë32bit¡Ê4¥Ð¥¤¥È¡Ë¤Þ¤Ç
1²ó¤Î·×»»¤Ç½èÍý¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë
¤³¤ì¤¬¥á¥â¥ê´ÉÍý»þ¤Ëº¤¤Ã¤¿»öÂÖ¤òȯÀ¸¤¹¤ë¤³¤È¤¬¤¢¤ë
¡ÊÆä˥ͥåȥ¥¯·Ï¡¢¤Þ¤¿¤Ï¥á¥â¥ê»ÈÍÑÎ̤ÎÀ©¸Â¤¬¤¢¤ë¤È¤­¡Ë
¤È¤¤¤¦¤Î¤Ï
¤¿¤È¤¨¤Ð¤Ë32bit¥Þ¥·¥ó¤Ë¤È¤Ã¤Æ¤Ï4¥Ð¥¤¥Èñ°Ì¤Î¤¬·×»»¤·¤ä¤¹¤¤¤Î¤Ç
¾¡¼ê¤ËVC2005¤Î¥³¥ó¥Ñ¥¤¥é¤Ï¡Ê¹½Â¤ÂΤʤɤΡ˥ǡ¼¥¿·¿¤ò4¤ÎÇÜ¿ô¤ËÅý°ì¤·¤Æ¤·¤Þ¤¦
¤³¤Î¤È¤­È¯À¸¤¹¤ë¥Ç¡¼¥¿¤Î·ä´Ö¤Î̵ÂÌ¥á¥â¥ê¤ò¥¢¥é¥¤¥á¥ó¥È¤È¤¤¤¦

Âкö¤È¤·¤Æ¤Ï32bit¥Þ¥·¥ó¤Î¾ì¹ç¡¢
£±¤Ä¤á¤Ï4¥Ð¥¤¥Èñ°Ì¤Î¥Ç¡¼¥¿·¿¤«¤éÊÑ¿ô¤òÄêµÁ¤·¤Æ¤¤¤­¥Ñ¥Ç¥£¥ó¥°¤òÆþ¤ì¤ë
¤¿¤À¤·¡¢¤³¤Î¾ì¹ç½èÍý·Ï¤´¤È¤Ë¹½Â¤ÂΤÎÃæ¿È¤Î¥Ñ¥Ç¥£¥ó¥°¤òÊѤ¨¤Ê¤¤¤È¤¤¤±¤Ê¤¯¤Ê¤ë
¤â¤¦¤Ò¤È¤Ä¤Ï#pragma pack¤ò»È¤¦

#pragma¼«ÂΤâ½èÍý·Ï°Í¸¤À¤¬

#pragma pack(push,¥¢¥é¥¤¥á¥ó¥È)¤ò»È¤¦¤³¤È¤Ç¥¢¥é¥¤¥á¥ó¥È¤ò»ØÄꤷ¤Æ¤ä¤ë¤³¤È¤¬¤Ç¤­¤ë
¤Þ¤¿¡¢#pragma pack(pop)¤ÇŬ±þÈϰϤò»ØÄꤷ¤Æ¤ä¤ë¤³¤È¤â¤Ç¤­¤ë

#pragma pack¤Ï¤Û¤È¤ó¤É¤ÎC¥³¥ó¥Ñ¥¤¥é¤Ç»È¤¨¤ë¤é¤·¤¤¡¦¡¦¡¦¡Ê³Îǧ¤ÏɬÍסË

    // ¥¢¥é¥¤¥á¥ó¥È
   #include <stdio.h>
   
   typedef struct s1
   {
       char ch1;
       int i1;
   } t1;
   
   // ¥¢¥é¥¤¥á¥ó¥È¤ò»ØÄꤷ¤Æ¤ä¤ë
   // 1,2,4,16,32(2¤ÎÇÜ¿ôñ°Ì)
   #pragma pack(push,1)
   typedef struct s2
   {
       char ch1;
       int i1;
   } t2;
   #pragma pack(pop)
   
   int main(int argc,char *argv[])
   {
       printf("size of t1=%d\n",sizeof(t1));
       printf("size of t2=%d\n",sizeof(t2));
       return 0;
   }
ÁªÂò»è Åêɼ
¡Ê¡°¦Ø¡°¡Ëktkr 0  
ÉáÄÌ 0  
¡£¡Ê`¦Ø¡­#¡Ë¡£¤Ê¤ó¤¸¤ã¤³¤ê¤ã¤¢¤¢ 2  

¥È¥Ã¥×   ÊÔ½¸ Åà·ë º¹Ê¬ ¥Ð¥Ã¥¯¥¢¥Ã¥× źÉÕ Ê£À½ ̾Á°Êѹ¹ ¥ê¥í¡¼¥É   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS
Last-modified: 2010-09-29 (¿å) 14:47:42