久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

intptr

 lifei_szdz 2013-01-09

intptr_t 其實(shí)不是指針類型  

2012-07-16 16:34:52|  分類: C++ |字號(hào) 訂閱

intptr_t 其實(shí)不是指針類型

分類: C語(yǔ)言 2012-04-23 17:26 336人閱讀 評(píng)論(0) 收藏 舉報(bào)

 最近在看nginx源碼,,看到有一個(gè)類型intptr_t,沒(méi)有見(jiàn)過(guò),,google了一下,,有人說(shuō)是指針類型,但是看nginx源碼中對(duì)該類型變量的使用,,好像不是指針類型,。

  1. static ngx_int_t  
  2.  667 ngx_get_options(int argc, char *const *argv)  
  3.  668 {  
  4.  669     u_char     *p;  
  5.  670     ngx_int_t   i;  
  6.  671   
  7.  672     for (i = 1; i < argc; i++) {  
  8.  673   
  9.  674         p = (u_char *) argv[i];  
  10.  675   
  11.  676         if (*p++ != '-') {  
  12.  677             ngx_log_stderr(0, "invalid option: \"%s\"", argv[i]);  
  13.  678             return NGX_ERROR;  
  14.  679         }  
  15.  680   
  16.  681         while (*p) {  
  17.  682   
  18.  683             switch (*p++) {  
  19.  684   
  20.  685             case '?':  
  21.  686             case 'h':  
  22.  687                 ngx_show_version = 1;  
  23.  688                 ngx_show_help = 1;  
  24.  689                 break;  
其中ngx_int_t的定義如下:
  1. 78 typedef intptr_t        ngx_int_t;  


于是在linux的頭文件中查找這個(gè)類型的定義,在/usr/include/stdint.h這個(gè)頭文件中找到了這個(gè)類型的定義(不知道怎么在這里插入圖片,,所以使用文字):

                           

  1. 117 /* Types for `void *' pointers.  */  
  2. 118 #if __WORDSIZE == 64  
  3. 119 # ifndef __intptr_t_defined  
  4. 120 typedef long int        intptr_t;  
  5. 121 #  define __intptr_t_defined  
  6. 122 # endif  
  7. 123 typedef unsigned long int   uintptr_t;  
  8. 124 #else  
  9. 125 # ifndef __intptr_t_defined  
  10. 126 typedef int         intptr_t;  
  11. 127 #  define __intptr_t_defined  
  12. 128 # endif  
  13. 129 typedef unsigned int        uintptr_t;  
  14. 130 #endif  

很明顯intptr_t不是指針類型,,但是上邊的一句注釋(/* Types for `void *' pointers. */)讓人很疑惑。既然不是指針類型,,但是為什么說(shuō)類型是為了“void *”指針,?

又查了一下在《深入分析Linux內(nèi)核源碼》中找到了答案,原文描述如下

盡管在混合不同數(shù)據(jù)類型時(shí)你必須小心, 有時(shí)有很好的理由這樣做. 一種情況是因?yàn)閮?nèi)存存取, 與內(nèi)核相關(guān)時(shí)是特殊的. 概念上, 盡管地址是指針, 內(nèi)存管理常常使用一個(gè)無(wú)符號(hào)的整數(shù)類型更好地完成; 內(nèi)核對(duì)待物理內(nèi)存如同一個(gè)大數(shù)組, 并且內(nèi)存地址只是一個(gè)數(shù)組索引. 進(jìn)一步地, 一個(gè)指針容易解引用; 當(dāng)直接處理內(nèi)存存取時(shí), 你幾乎從不想以這種方式解引用. 使用一個(gè)整數(shù)類型避免了這種解引用, 因此避免了 bug. 因此, 內(nèi)核中通常的內(nèi)存地址常常是 unsigned long, 利用了指針和長(zhǎng)整型一直是相同大小的這個(gè)事實(shí), 至少在 Linux 目前支持的所有平臺(tái)上.

因?yàn)槠渌档脑? C99 標(biāo)準(zhǔn)定義了 intptr_t 和 uintptr_t 類型給一個(gè)可以持有一個(gè)指針值的整型變量. 但是, 這些類型幾乎沒(méi)在 2.6 內(nèi)核中使用

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多