about pack and align for C/C++
http://msdn.microsoft.com/en-us/library/2e70t5y1(VS.80).aspx
#pragma
pack( n )
n : Valid values are 1, 2, 4, 8, and 16.the
alignment of a member will be on a boundary that is either a multiple of
n
or
a multiple of the size of the member
,
whichever is smaller.
The
default value for n
is 8
³ÉÔ±±äÁ¿¶ÔÆë£ºÑ¡n
ºÍ¸Ã³ÉÔ±³¤¶È
µÄ
×îСֵ(µÄ±¶Êý)
½á¹¹ABCDÖÐdµÄ¶ÔÆë·½Ê½£¬Ñ¡nºÍsizeof(d)µÄ×îСֵ8£¬È»ºó°´8×Ö½Ú¶ÔÆë£¡£¡£¡
sizeof´óС£ºÑ¡n
ºÍ×î´ó³É
Ô±³¤¶È
µÄ×îСֵ£¬¶ÔÆë
Àý×Ó£º
#pragma
pack(8)
struct ABCD
{
bool
b;
short s;
double d;
};
int
main()
{
cout << offsetof(ABCD,
b) << endl;
cout << offsetof(ABCD,
s) << endl;
cout << offsetof(ABCD,
d) << endl;
cout << sizeof(ABCD) << endl;
}
output
is:
0
2
8
16
http://msdn.microsoft.com/en-us/library/83ythb65(VS.71).aspx
__declspec( align( n ) )
__declspec( align() ) ºÍ #pragma pack
ÊÇÒ»¶ÔÐֵܣ¬Ç°Õ߹涨ÁË¶ÔÆëµÄ×îСֵ£¬ºóÕ߹涨ÁË¶ÔÆëµÄ×î´óÖµ£¬Á½Õßͬʱ³öÏÖʱ£¬Ç°ÕßÓµÓиü¸ßµÄÓÅÏȼ¶¡£
Àý×Ó£º
#define
CACHE_ALIGN 64
// Force each structure to be
in a different cache line.
struct
__declspec(align(CACHE_ALIGN)) CUSTINFOAA {
DWORD
dwCustomerID; // Mostly read-only
wchar_t
szName[100]; // Mostly read-only
// Force the following members to be in a different cache line.
__declspec(align(CACHE_ALIGN))
int
nBalanceDue; // Read-write
FILETIME
ftLastOrderDate; // Read-write
};
int
main()
{
cout <<
offsetof(CUSTINFOAA, dwCustomerID) << endl;
cout
<< offsetof(CUSTINFOAA, szName) << endl;
cout
<< offsetof(CUSTINFOAA, nBalanceDue) << endl;
cout << offsetof(CUSTINFOAA, ftLastOrderDate) <<
endl;
cout << sizeof(CUSTIN
Ïà¹ØÎĵµ£º
¸ÅÊö¡¡¡¡
extern "C" °üº¬Ë«Öغ¬Ò壬´Ó×ÖÃæÉϼ´¿ÉµÃµ½£ºÊ×ÏÈ£¬±»ËüÐÞÊεÄÄ¿±êÊÇ“extern”µÄ£»Æä´Î£¬±»ËüÐÞÊεÄÄ¿±êÊÇ“C”µÄ¡£ÈÃÎÒÃÇÀ´Ïêϸ½â¶ÁÕâÁ½Öغ¬Òå¡£
¡¡¡¡£¨1£© ±»extern "C"ÏÞ¶¨µÄº¯Êý»ò±äÁ¿ÊÇexternÀàÐ͵Ä
¡¡¡¡externÊÇC/C++ÓïÑÔÖбíÃ÷º¯ÊýºÍÈ«¾Ö±äÁ¿×÷Ó÷¶Î§£¨¿É¼ûÐÔ£©µÄ¹Ø¼ü×Ö£¬¸Ã¹Ø¼ü× ......
CÓïÑԵijõѧÕß³£·¸µÄÒ»¸öʧÎóÊǵ÷ÓÃϵͳ»òµÚÈý·½APIʱÍüÁËÔÚº¯ÊýÉùÃ÷Öбê×¢WINAPIµ÷Ó÷½Ê½£¬¶ø²ËÄñC++³ÌÐòԱҲÿÿÀ§»óΪʲô³ÉÔ±º¯Êý±ØÐëָʾΪCALLBACKÔÙÌí¼Óstatic¹Ø¼ü×Ö²ÅÄÜ×÷Ϊ»Øµ÷º¯Êý¡£ÔÚx86ϵͳÖУ¬´æÔÚ¶àÖÖº¯Êýµ÷ÓÃÔ¼¶¨¡£Èç¹ûµ÷ÓÃÕßÓë±»µ÷ÓÃÕß²ÉÓò»Í¬µÄµ÷ÓÃÔ¼¶¨£¬ºÜ¿ÉÄܵ¼Ö¶ÑÕ»ÆÆ»µ¡¢·Ç·¨·ÃÎʵÈÖÂÃü´íÎó¡£
ҲР......
1£¬Õ»Çø£¨stack£©— ÓɱàÒëÆ÷×Ô¶¯·ÖÅäÊÍ·Å£¬´æ·Åº¯ÊýµÄ²ÎÊýÖµ£¬¾Ö²¿±äÁ¿µÄÖµµÈ¡£Æä²Ù×÷·½Ê½ÀàËÆÓÚÊý¾Ý½á¹¹ÖеÄÕ»¡£ ÀýÈ磬ÉùÃ÷ÔÚº¯ÊýÖеÄÒ»¸ö¾Ö²¿±äÁ¿int b£»ÏµÍ³×Ô¶¯ÔÚÕ»ÖÐΪb¿ª±Ù¿Õ¼ä¡£Ö»ÒªÕ»µÄÊ£Óà¿Õ¼ä´óÓÚËùÉêÇë¿Õ¼ä£¬ÏµÍ³½«Îª³ÌÐòÌṩÄڴ棬·ñÔò½«±¨Òì³£ÌáʾջÒç³ö¡£±ÈÈ磺
char* AllocStrfromStack ......
×÷ÕߣºËᦻª e-mail:21cnbao@21cn.com
1. ÒýÑÔ
Ö¸ÕëÊÇC/C++ÓïÑÔµÄÌØÉ«£¬¶øÊý×éÃûÓëÖ¸ÕëÓÐÌ«¶àµÄÏàËÆ£¬ÉõÖÁºÜ¶àʱºò£¬Êý×éÃû¿ÉÒÔ×÷ΪָÕëʹÓá£ÓÚÊǺõ£¬ºÜ¶à³ÌÐòÉè¼ÆÕ߾ͱ»¸ãºýÍ¿ÁË¡£¶øÐí¶àµÄ´óѧÀÏʦ£¬ËûÃÇÔÚCÓïÑԵĽÌѧ¹ý³ÌÖÐÒ²´íÎóµÃ¸øÑ§Éú½²½â£º“Êý×éÃû¾ÍÊÇÖ¸Õ딡£ºÜÐÒÔË£¬ÎҵĴóѧÀÏ ......
VC++
ÓëVB
Êý¾ÝÀàÐͶÔÓ¦¹ØÏµ
ÔÚ×öVCÓëvb³ÌÐò¼ä»¥Ïàµ÷Óã¬ÐèҪעÒâÁ½ÖÖÓïÑÔ²»Í¬±àÒëÆ÷¶ÔÊý¾ÝÀàÐ͵͍ÒåÇø±ð£¬´ËʱÁ½ÕßÊý¾ÝÀàÐ͵ĶÔÓ¦¹ØÏµ¾ÍÏÔµÃÊ®·ÖµÄÖØÒª£¬¶ÔÓ¦¹ØÏµÒÔ¼°ÉùÃ÷·½Ê½ÈçÏÂËùʾ¡£
VC++
VB
short
Integer
int
Long
long
Long
UNIT
Long
ULONG
Long
WORD
DWORDLon ......