¼ÓÈëÊÕ²Ø | ÉèΪÊ×Ò³ | »áÔ±ÖÐÐÄ | ÎÒҪͶ¸å ÉÌÂåÕ¾³¤Íø £¨https://www.0914zz.com/£©- AIÓ¦Óá¢CDN¡¢±ßÔµ¼ÆËã¡¢ÔƼÆËã¡¢ÎïÁªÍø!
µ±Ç°Î»Ö㺠Ê×Ò³ > ×ۺϾ۽¹ > Linux > ÕýÎÄ

ΪʲôLinuxϵͳµ÷Ó÷µ»ØÀàÐÍ¡°long¡±£¿

·¢²¼Ê±¼ä£º2021-01-24 12:44:34 ËùÊôÀ¸Ä¿£ºLinux À´Ô´£º»¥ÁªÍø
µ¼¶Á£ºÎÒÕýÔÚÔĶÁ LinuxÄں˿ª·¢,µÚ3°æ,Á˽âÄÚºËʵÏÖºÍÉè¼Æ.µÚ5ÕÂÊǹØÓÚϵͳµ÷ÓÃ.×÷ÕßÏÔʾÁËʹÓÃSYSCALL_DEFINE0ºê¶¨ÒåµÄϵͳµ÷ÓÃÉùÃ÷µÄʾÀý,¸ÃºêÔÚ¸ÃÌض¨Ê¾ÀýÖÐÕ¹¿ªÎª£º asmlinkage long sys_getpid(void) Ëû½øÒ»²½Ëµ£º [¡­] For compatibility between 32- and 64

ÎÒÕýÔÚÔĶÁ LinuxÄں˿ª·¢,µÚ3°æ,Á˽âÄÚºËʵÏÖºÍÉè¼Æ.µÚ5ÕÂÊǹØÓÚϵͳµ÷ÓÃ.×÷ÕßÏÔʾÁËʹÓÃSYSCALL_DEFINE0ºê¶¨ÒåµÄϵͳµ÷ÓÃÉùÃ÷µÄʾÀý,¸ÃºêÔÚ¸ÃÌض¨Ê¾ÀýÖÐÕ¹¿ªÎª£º

asmlinkage long sys_getpid(void)

Ëû½øÒ»²½Ëµ£º

[¡­] For compatibility between 32- and 64-bit systems,system calls defined to return an int in user-space return a long in the kernel.

Ëû²»»á±ÈÕâ¸üÉî¿Ì,ÎÒ²»ÄÜÍêÈ«Àí½âΪʲô»áÕâÑù.ΪʲôҪʹÓÃÓë32λºÍ64λϵͳÏà¹ØµÄ³¤ÆÚ¹Øϵ£¿ÎªÊ²Ã´ÎÒÃDz»ÄÜ·µ»ØÒ»¸ö¼òµ¥µÄint£¿

½â¾ö·½·¨

ÒòΪÔÚÐí¶à 64 bits»úÆ÷(ÀýÈçx86-64)ÉÏÓÃÓÚ³£¼ûµÄGCC±àÒëÆ÷sizeof(int)== 4µ«ÊÇsizeof(void *)== 8&&µÄsizeof(³¤)== 8;Õâ±»³ÆΪI32LP64(»òÖ»ÊÇLP64) data model

ÀýÈç,ÔÚLinux / x86-64ϵͳÉϱàÒë²¢ÔËÐÐÒÔϳÌÐò£º

#include<stdio.h>
#include<stdint.h>
int main ()
{
  printf ("sizeof(int)=%dn",(int) sizeof (int));
  printf ("sizeof(intptr_t)=%dn",(int) sizeof (intptr_t));
  printf ("sizeof(short)=%dn",(int) sizeof (short));
  printf ("sizeof(long)=%dn",(int) sizeof (long));
  printf ("sizeof(long long)=%dn",(int) sizeof (long long));
  printf ("sizeof(void*)=%dn",(int) sizeof (void *));
  return 0;
}

ÔÚÎÒµÄϵͳÉÏʹÓÃgcc -Wall s.c -o±àÒë²¢ÔÚÎÒµÄDebian / Sid / x86-64(i3770k´¦ÀíÆ÷,GCC 4.8.2)ÉÏÔËÐÐ./s£º

sizeof(int)=4
sizeof(intptr_t)=8
sizeof(short)=2
sizeof(long)=8
sizeof(long long)=8
sizeof(void*)=8

ÔÚ32λģʽÏÂʹÓÃgcc -m32 -Wall s.c -o s32±àÒë²¢ÔËÐÐ./s32£º

sizeof(int)=4
sizeof(intptr_t)=4
sizeof(short)=2
sizeof(long)=4
sizeof(long long)=8
sizeof(void*)=4

Èç¹ûʹÓÃgcc -mx32 -O3 -Wall s.c -o sx32±àÒëx32,Îҵõ½ÏàͬµÄÊä³ö£¡

BTW,Ò²Ðí¸üºÃµÄÎÊÌâÊÇΪʲô²»Ê¹ÓÃintptr_t ¡­.ÎÒ²»ÖªµÀ(¿ÉÄÜÊÇÒ»¸öÏ°¹ßÎÊÌâ; when LinusÊ×ÏÈ¿ªÊ¼±àдËûµÄÄÚºË,C99±ê×¼¶¨Òå< stdint.h>ºÍintptr_t-²»´æÔÚ).

ÔĶÁ¸ü¶à¹ØÓÚABIs,ÌرðÊÇ×ÐϸÔĶÁX86-64 ABI(Áí¼ûx32 ABI ¡­)ºÍx86 calling conventionsµÄwikipage.

£¨±à¼­£ºÉÌÂåÕ¾³¤Íø£©

¡¾ÉùÃ÷¡¿±¾Õ¾ÄÚÈݾùÀ´×ÔÍøÂ磬ÆäÏà¹ØÑÔÂÛ½ö´ú±í×÷Õ߸öÈ˹۵㣬²»´ú±í±¾Õ¾Á¢³¡¡£ÈôÎÞÒâÇÖ·¸µ½ÄúµÄȨÀû£¬Ç뼰ʱÓëÁªÏµÕ¾³¤É¾³ýÏà¹ØÄÚÈÝ!

    ÍƼöÎÄÕÂ
      ÈȵãÔĶÁ