C/C++½á¹¹Ìå×Ö½Ú¶ÔÆë
[×¢]£º×î½üÔÚ×öUVCÃèÊö·ûµÄ±à¼¹¤¾ß£¬Óõ½ºÜ¶àµÄ½á¹¹£¬ÎªÁË·½±ã°Ñ½á¹¹Ìåд³ÉbinÎļþ£¬ÐèÒª°Ñ½á¹¹ÌåÖÐÌî³äµÄ×Ö½ÚÈ¥µô£¬ÔÚÍøÉÏËÑË÷µÃµ½ÕâÆªÎÄÕ£¬¸Ð¾õͦºÃµÄ£¬×ª¹ýÀ´×ö¸ö¼ÍÄî¡£
½á¹¹Ìå(struct)µÄsizeofÖµ£¬²¢²»ÊǼòµ¥µÄ½«ÆäÖи÷ÔªËØËùÕ¼×Ö½ÚÏà¼Ó£¬¶øÊÇÒª¿¼Âǵ½´æ´¢¿Õ¼äµÄ×Ö½Ú¶ÔÆëÎÊÌâ¡£ÏÈ¿´ÏÂÃæ¶¨ÒåµÄÁ½¸ö½á¹¹Ìå.
struct
{
char a;
short b;
char c;
}S1;
struct
{
char a;
char b;
short c;
}S2;
·Ö±ðÓóÌÐò²âÊԵóösizeof(S1)=6 , sizeof(S2)=4
¿É¼û£¬ËäÈ»Á½¸ö½á¹¹ÌåËùº¬µÄÔªËØÏàͬ£¬µ«ÒòΪÆäÖдæ·ÅµÄÔªËØÀàÐÍ˳Ðò²»Ò»Ñù£¬ËùÕ¼×Ö½ÚÒ²³öÏÖ²îÒì¡£Õâ¾ÍÊÇ×Ö½Ú¶ÔÆëÔÒò¡£Í¨¹ý×Ö½Ú¶ÔÆë£¬ÓÐÖúÓÚ¼Ó¿ì¼ÆËã»úµÄÈ¡ÊýËÙ¶È£¬·ñÔò¾ÍµÃ¶à»¨Ö¸ÁîÖÜÆÚ¡£
×Ö½Ú¶ÔÆëÔÔò
½á¹¹ÌåĬÈϵÄ×Ö½Ú¶ÔÆëÒ»°ãÂú×ãÈý¸ö×¼Ôò£º
1) ½á¹¹Ìå±äÁ¿µÄÊ×µØÖ·Äܹ»±»Æä×î¿í»ù±¾ÀàÐͳÉÔ±µÄ´óСËùÕû³ý£»
2) ½á¹¹Ìåÿ¸ö³ÉÔ±Ïà¶ÔÓڽṹÌåÊ×µØÖ·µÄÆ«ÒÆÁ¿£¨offset£©¶¼ÊdzÉÔ±×ÔÉí´óСµÄÕûÊý±¶£¬ÈçÓÐÐèÒª±àÒëÆ÷»áÔÚ³ÉÔ±Ö®¼ä¼ÓÉÏÌî³ä×Ö½Ú£¨internal adding£©£»
3) ½á¹¹ÌåµÄ×Ü´óСΪ½á¹¹Ìå×î¿í»ù±¾ÀàÐͳÉÔ±´óСµÄÕûÊý±¶£¬ÈçÓÐÐèÒª±àÒëÆ÷»áÔÚ×îĩһ¸ö³ÉÔ±Ö®ºó¼ÓÉÏÌî³ä×Ö½Ú£¨trailing padding£©¡£
ͨ¹ýÕâÈý¸öÔÔò£¬¾Í²»ÄÑÀí½âÉÏÃæÁ½¸östructµÄ²îÒìÁË.
¶ÔÓÚstruct S1, ΪÁËʹshort±äÁ¿Âú×ã×Ö½Ú¶ÔÆä×¼Ôò(2), ¼´Æä´æ´¢Î»ÖÃÏà¶ÔÓڽṹÌåÊ×µØÖ·µÄoffsetÊÇ×ÔÉí´óС(shortÕ¼2¸ö×Ö½Ú)µÄÕûÊý±¶£¬±ØÐëÔÚ×Ö½ÚaºóÃæÌî³äÒ»¸ö×Ö½ÚÒÔ¶ÔÆë£»ÔÙÓÉ×¼Ôò(3),ΪÁË Âú×ã½á¹¹Ìå×Ü´óСΪshort´óСµÄÕûÊý±¶£¬±ØÐëÔÙÔÚcºóÃæÌî³äÒ»¸ö×Ö½Ú¡£
¶ÔÓÚstruct S2, È´²»±ØÈçÉÏËùÊöµÄÌî³ä×Ö½Ú£¬ÒòΪÆäÖ±½Ó˳Ðò´æ´¢ÒѾÂú×ãÁË¶ÔÆë×¼Ôò¡£
Èç¹û½«ÉÏÃæÁ½¸ö½á¹¹ÌåÖеÄshort¶¼¸ÄΪint(Õ¼4¸ö×Ö½Ú), ÄÇô»áÔõôÑùÄØ£¿ ³ÌÐòµÃ³ösizeof(S1)=12, sizeof(S2)=8
ÀûÓÃÉÏÃæµÄ×¼Ôò£¬Ò²²»ÄѼÆËãµÃ³öÕâÑùµÄ½á¹û¡£S1ÖÐÔÚaºóÃæÌî³ä3¸ö×Ö½Ú¡¢ÔÚcºóÃæÌî³ä3¸ö×Ö½Ú£¬ÕâÑùÒ»¹²12¸ö×Ö½Ú£»S2ÖÐÔÚa¡¢b˳Ðò´æ´¢Ö®ºóÌî³äÁ½¸ö×Ö½ÚÓÃÒÔ¶ÔÆä£¬ÕâÑùÒ»¹²¾Í8¸ö×Ö½Ú¡£
µ±È»£¬ÔÚijЩʱºòÒ²¿ÉÒÔÉèÖÃ×Ö½Ú¶ÔÆë·½Ê½¡£Õâ¾ÍÐèҪʹÓà #pragma pack ¡£
#pragma pack(push) //ѹջ±£´æ
#pragma pack(1)// ÉèÖÃ1×Ö½Ú¶ÔÆë
struct
{
char a;
short b;
char c;
}S1;
#pragma pack(pop) // »Ö¸´ÏÈǰÉèÖÃ
ÈçÉÏËùʾ£¬½«¶ÔÆä·½Ê½ÉèΪ1×Ö½Ú¶ÔÆë£
Ïà¹ØÎĵµ£º
ÔÚANSI±ê×¼»¯ºó£¬CÓïÑԵıê×¼ÔÚÒ»¶ÎÏ൱µÄʱ¼äÄÚ¶¼±£³Ö²»±ä£¬¾¡¹ÜC++¼ÌÐøÔڸĽø¡££¨Êµ¼ÊÉÏ£¬Normative Amendment1ÔÚ1995ÄêÒѾ¿ª·¢ÁËÒ»¸öеÄCÓïÑÔ°æ±¾¡£µ«ÊÇÕâ¸ö°æ±¾ºÜÉÙΪÈËËùÖª¡££©±ê×¼ÔÚ90Äê´ú²Å¾ÀúÁ˸Ľø£¬Õâ¾ÍÊÇISO9899:1999£¨1999Äê³ö°æ£©¡£Õâ¸ö°æ±¾¾ÍÊÇͨ³£Ìá¼°µÄC99¡£Ëü±»ANSIÓÚ2000ÄêÈýÔ²ÉÓá£
¡¡¡¡ÔÚC99ÖаüÀ ......
ÔÚÏîÄ¿ÊôÐÔÒ³ --> ÅäÖÃÊôÐÔ --> C/C++ --> Êä³öÎļþÀïÃæ£¬½«»ã±àÊä³öµÄÏÂÀÁбí´ÓÎÞÁбíÑ¡ÔñΪÄãÐèÒª»ã±àÊä³öµÄÄÚÈÝ£¬±ÈÈ瓽öÁгö³ÌÐò¼¯(/FA)”£¬Èçͼ1-1£¬Í¼1-2£º
ͼ1-1
ͼ1-2
------------------------------------------------------------------------------------------------ ......
×î½üÔÚÍøÉϲéÁËºÃ¶à¹ØÓÚC²¥·ÅwavÕâ·½ÃæµÄ×ÊÁÏ£¬µ÷ÊÔ°ëÌìҲûÓнá¹û£¬Ëѵ½Ò»¸ö±àÒëºÃµÄEXEÎļþÄܲ¥·Å£¬Ã»ÓÐÔ´´úÂ룬·´»ã±à²»ÁË£¬ËÄÜÖ¸µãһϡ£¡£¡£¡£¡£ÒÔÏÂÁ½ÖÖ´úÂë¶Î£º
#include <stdio.h>
#include <dos.h>
/* wavÎļþ½á¹¹ */
typedef struct WaveData
{
unsigned long sample_le ......
Õ»£ºº¯Êýµ÷ÓõÄʱºò£¬ÔÚÕ»Öб£´æ¾Ö²¿±äÁ¿ºÍº¯Êý²ÎÊýµÈ¡£µ±º¯Êý·µ»ØÊ±£¬×Ô¶¯Çå³ýÕ»¡£
×ÔÓÉ´æ´¢Çø£ºÒ²³ÆÎª¶Ñ(heap)£¬¿ÉÒÔ¿´×÷´óÁ¿µÄÄÚ´æ¶Î¡£Í¨¹ý new ²Ù×÷·û·ÖÅäµÄÄÚ´æÔÚ¶ÑÖС£³ÌÐò½áÊøÖ®Ç°²»×Ô¶¯Çå³ý×ÔÓÉ´æ´¢Çø¡£ÐèÒªÓɳÌÐòÀ´¸ºÔðÊÍ·Å£¨delete£©¡£
1.
¶ÔÖ¸ÏòÕ»ÉÏÄÚ´æµÄÖ¸Õëµ÷ÓÃdelete»áµ¼Ö³ÌÐòCrash¡£
2.
new ½ø ......
ÓÐÈçϳÌÐò£º
//-----------------
class A
{
public:
A()
{
printf( "base A\r\n" );
}
virtual ~A()
{
printf( "base ~A\r\n" );
}
public:
virtual void VirtualFunc()
{
printf( "base VirtualFunc\r\n" );
};
void Func()
{
printf( "base Func\r\n" );
}
void F1()
{
pr ......