|
ÊÑ¿ô¤Î¥¹¥³¡¼¥×¤È¥á¥â¥ê´ÉÍý¤Ë¤Ä¤¤¤Æ ÊÑ¿ô¤Î¼÷Ì¿¤È¥á¥â¥ê¤Î̵Â̻Ȥ¤¤ò¸º¤é¤¹¤³¤È¤Ç ¡ ÊÑ¿ô¤Î¼÷Ì¿ ¥í¡¼¥«¥ë¤ÊÊÑ¿ô¤Î¾ì¹ç¡¢¥Ö¥í¥Ã¥¯¡Ê¥«¥®¥«¥Ã¥³¡Ë¤ò¤Ì¤±¤ë¤Þ¤Ç¤¬ÊÑ¿ô¤Î¼÷Ì¿ {
int a;
{
int b;
}// ¢«b¤Î¼÷Ì¿
}//¢«a¤Î¼÷Ì¿
¢placement new // 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¥Þ¥·¥ó¤Î¾ì¹ç¡¢ #pragma¼«ÂΤâ½èÍý·Ï°Í¸¤À¤¬ #pragma pack(push,¥¢¥é¥¤¥á¥ó¥È)¤ò»È¤¦¤³¤È¤Ç¥¢¥é¥¤¥á¥ó¥È¤ò»ØÄꤷ¤Æ¤ä¤ë¤³¤È¤¬¤Ç¤¤ë #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;
}
|