Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

C ÓïÑÔÊý¾Ý¶ÔÆë

#include <stdio.h>    
struct Foo1
{
   char a;
   int  b;
   char c;
   int  d;
};
#pragma pack (2)
struct Foo2
{
   char a;
   int  b;
   char c;
   int  d;
};
#pragma pack ()
struct Foo3
{
   char a;
   char c;
   int  b;
   int  d;
};
struct Foo4
{
   char a;
   int  b;
   char c;
   int  d;
} __attribute__ ((__packed__));
int main(int argc, char **argv)
{
   printf("size of Foo1: %d ", sizeof(struct Foo1));
   printf("size of Foo2: %d ", sizeof(struct Foo2));
   printf("size of Foo3: %d ", sizeof(struct Foo3));
   printf("size of Foo4: %d ", sizeof(struct Foo4));
   return 0;
}
ÏÂÃæµÄС³ÌÐòÊǹØÓÚÊý¾Ý¶ÔÆëµÄÒ»¸öÊÔÑ飬ÔÚÎÒµÄ 2.4 ÄÚºËµÄ Linux ÉÏÔËÐнá¹ûÈçÏ£º
size of Foo1: 16
size of Foo2: 12
size of Foo3: 12
size of Foo4: 10
1¡¢ Foo1 δ¾­¹ýÈκδ¦ÀíµÄ£¬ÓÉÓÚÕûÐÍÐèÒª°´ 4 ×Ö½Ú¶ÔÆë£¬Òò´Ëʵ¼Ê´æ´¢½á¹ûÈçÏ£¬Õ¼Óà 16 ¸ö×Ö½Ú¿Õ¼ä

2¡¢Foo2 ͨ¹ý #pragma pack (2) £¬½«¶ÔÆë·½Ê½¸ÄΪ 2 ×Ö½Ú¶ÔÆë£¬Êµ¼Ê´æ´¢½á¹ûÈçÏ£¬Õ¼Óà 12 ×Ö½Ú¿Õ¼ä
3¡¢ Foo3, ͨ¹ý #pragma pack ()£¬ÓÖ»Ö¸´µ½Ä¬È쵀 4 ×Ö½Ú¶ÔÆë·½Ê½£¬µ«ÊÇÓÉÓÚµ÷ÕûÁ˱äÁ¿µÄ˳Ðò£¬Êµ¼Ê´æ´¢½á¹ûÈçÏ£¬Õ¼Óà 12 ×Ö½Ú¿Õ¼ä

4¡¢Foo4, ͨ¹ý GCC µÄ __packed__ µÄÀ©Õ¹ÊôÐÔ£¬½ûÖ¹¶ÔÆë£¬µÃµ½ÈçϽá¹û£¬Õ¼Óÿռä 10 ×Ö½Ú


Ïà¹ØÎĵµ£º

³£ÓõÄC/C++¹¤³ÌMakefileÄ£°å

תÌû£ºÒ»»ÔµÄÎÄÕÂ
ÔÚLinuxÏÂ×ö¿ª·¢ÄÑÃâÒª½Ó´¥makefile£¬Õû¸öÏîÄ¿µÄ¹¹½¨¶¼ÒÀÀµÓÚËü¡£100¸ödeveloperÓÐ100ÖÖmakefileµÄд·¨£¬ÔÚÒ»¸ö½Ï´óµÄÏîÄ¿ÖУ¬¸÷ÖÖ¸÷ÑùµÄmakefileÎÞÂÛÔÚ¿ª·¢¡¢ºóÆÚά»¤»¹ÊÇÕû¸öϵͳµÄ³ÖÐø¼¯³É¶¼ÊÇÒ»¸ö¸ºµ£¡£
ÓÐÐÒ²ÎÓëÖØ¹¹Ò»¸öÒÅÁôϵͳµÄmakefile£¬ÒÔÏÂÊÇһЩÐĵúÍÒ»¸ömakefileÄ£°å¡£
ÖØ¹¹Ä¿µÄ£º
1.Çå ......

Windows Via C/C++: CreateThreadº¯Êý

CreateThreadº¯Êý
Ç°Ãæ½²¹ý£¬½ø³ÌµÄÖ÷Ï̻߳áÔÚCreateProcessµ÷ÓÃʱ×Ô¶¯´´½¨¡£¼ÙÈçÄãÒªÊÖ¹¤´´½¨Ị̈߳¬Äã¿ÉÒÔµ÷ÓÃCreateThreadº¯Êý£º
HANDLE CreateThread(
PSECURITY_ATTRIBUTES psa,
DWORD cbStackSize,
PTHREAD_START_ROUTINE pfnStartAddr,
PVOID pvParam,
DWORD dwCreateFlags,
PDWORD pdwThreadID) ......

c/c++ÄÚ´æ»®·Ö

      Ò»¡¢¸ö¾­¹ý±àÒëµÄC/C++µÄ³ÌÐòÕ¼ÓõÄÄÚ´æ·Ö³ÉÒÔϼ¸¸ö²¿·Ö:
      1¡¢Õ»Çø£¨stack£©£ºÓɱàÒëÆ÷×Ô¶¯·ÖÅäºÍÊÍ·Å £¬´æ·Åº¯ÊýµÄ²ÎÊýÖµ¡¢¾Ö²¿±äÁ¿µÄÖµµÈ£¬ÉõÖÁº¯ÊýµÄµ÷Óùý³Ì¶¼ÊÇÓÃÕ»À´Íê³É¡£Æä²Ù×÷·½Ê½ÀàËÆÓÚÊý¾Ý½á¹¹ÖеÄÕ»¡£ 
¡¡¡¡2¡¢¶ÑÇø£¨heap£© £ºÒ»°ãÓɳÌÐ ......

CºÍC++ÓïÑÔѧϰ×ܽá zz

֪ʶ½á¹¹:
1¡¢if,for,switch,goto
2¡¢#define,const
3¡¢Îļþ¿½±´µÄ´úÂë,¶¯Ì¬Éú³ÉÄÚ´æ,¸´ºÏ±í´ïʽ,strcpy,memcpy,sizeof
4¡¢º¯Êý²ÎÊý´«µÝ,ÄÚ´æ·ÖÅ䷽ʽ,ÄÚ´æ´íÎó±íÏÖ,mallocÓënewÇø±ð
5¡¢ÀàÖØÔØ¡¢Òþ²ØÓ븲¸ÇÇø±ð,externÎÊÌâ,º¯Êý²ÎÊýµÄȱʡֵÎÊÌâ,ºê´úÂëÓëÄÚÁªº¯ÊýÇø±ð
6¡¢¹¹ÔìºÍÎö¹¹µÄ´ÎÐò,Stringº¯Êý¶¨Òå
¾ß ......

¼¸ÖÖC/C++µÄº¯Êýѹջ·½Ê½

Ò»£¬²»Í¬¹Ø¼ü×Ö£¬ÏµÍ³Ñ¹Õ»·½Ê½
1£¬Èç¹ûº¯ÊýfuncÊÇ__cdecl(VCϵÄĬÈϵ÷Ó÷½Ê½)£¬µ÷ÓÃʱÇé¿öÈçÏÂ
int main()
{
//²ÎÊý´ÓÓÒµ½×óѹջ
push 4
push 3
push 2
push 1
call func
add esp 0x10 //µ÷ÓÃÕ߻ָ´¶ÑÕ»Ö¸Õëesp£¬4¸ö²ÎÊýµÄ´óСÊÇ0x10(4x4)
}
Cµ÷ÓÃÔ¼¶¨£¨¼´ÓÃ__cdecl¹Ø¼ü×Ö˵Ã÷£©°´´ÓÓÒÖÁ×óµÄ˳Ðòѹ² ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ