intptr_t 其实不是指针类型 (转载)
原文地址http://blog.163.com/james_huangjian/blog/static/178049345201261643452479/
eflag寄存器
http://www.cnblogs.com/shenlian/archive/2011/05/22/2053857.html
intptr_t 其实不是指针类型 2012-07-16 16:34:52| 分类: C++ |字号 订阅 intptr_t 其实不是指针类型 分类: C语言 2012-04-23 17:26 336人阅读 评论(0) 收藏 举报 最近在看nginx源码,看到有一个类型intptr_t,没有见过,google了一下,有人说是指针类型,但是看nginx源码中对该类型变量的使用,好像不是指针类型。 [cpp] view plaincopy static ngx_int_t 667 ngx_get_options(int argc, char *const *argv) 668 { 669 u_char *p; 670 ngx_int_t i; 671 672 for (i = 1; i < argc; i++) { 673 674 p = (u_char *) argv[i]; 675 676 if (*p++ != '-') { 677 ngx_log_stderr(0, "invalid option: \"%s\"", argv[i]); 678 return NGX_ERROR; 679 } 680 681 while (*p) { 682 683 switch (*p++) { 684 685 case '?': 686 case 'h': 687 ngx_show_version = 1; 688 ngx_show_help = 1; 689 break; 其中ngx_int_t的定义如下: [cpp] view plaincopy 78 typedef intptr_t ngx_int_t; 于是在linux的头文件中查找这个类型的定义,在/usr/include/stdint.h这个头文件中找到了这个类型的定义(不知道怎么在这里插入图片,所以使用文字): [cpp] view plaincopy 117 /* Types for `void *' pointers. */ 118 #if __WORDSIZE == 64 119 # ifndef __intptr_t_defined 120 typedef long int intptr_t; 121 # define __intptr_t_defined 122 # endif 123 typedef unsigned long int uintptr_t; 124 #else 125 # ifndef __intptr_t_defined 126 typedef int intptr_t; 127 # define __intptr_t_defined 128 # endif 129 typedef unsigned int uintptr_t; 130 #endif 很明显intptr_t不是指针类型,但是上边的一句注释(/* Types for `void *' pointers. */)让人很疑惑。既然不是指针类型,但是为什么说类型是为了“void *”指针? 又查了一下在《深入分析Linux内核源码》中找到了答案,原文描述如下: 尽管在混合不同数据类型时你必须小心, 有时有很好的理由这样做. 一种情况是因为内存存取, 与内核相关时是特殊的. 概念上, 尽管地址是指针, 内存管理常常使用一个无符号的整数类型更好地完成; 内核对待物理内存如同一个大数组, 并且内存地址只是一个数组索引. 进一步地, 一个指针容易解引用; 当直接处理内存存取时, 你几乎从不想以这种方式解引用
相关推荐
拉斯厄尔高福 2020-10-19
csdnyasin 2020-06-28
penkgao 2020-06-13
qscool 2020-06-12
fengjing81 2020-06-06
AaronPlay 2020-06-02
lynjay 2020-06-02
twater000 2020-05-29
徐建岗网络管理 2020-05-13
qingsongzdq 2020-05-07
jeonkc 2020-05-06
lynjay 2020-05-03
徐建岗网络管理 2020-05-03
shangs00 2020-04-27
xuguiyi00 2020-04-22
qscool 2020-04-18
GoatSucker 2020-04-11