nginx中的整型

2013年1月31日 | 分类: 操作系统, 编程技术 | 标签:

nginx中对整型做了一次重新定义:

typedef intptr_t        ngx_int_t;
typedef uintptr_t       ngx_uint_t;
typedef intptr_t        ngx_flag_t;

至于intptr_t,uintptr_t,intptr_t在头文件/usr/include/stdint.h 中:

/* Types for `void *' pointers.  */
#if __WORDSIZE == 64
# ifndef __intptr_t_defined
typedef long int                intptr_t;
#  define __intptr_t_defined
# endif
typedef unsigned long int       uintptr_t;
#else
# ifndef __intptr_t_defined
typedef int                     intptr_t;
#  define __intptr_t_defined
# endif
typedef unsigned int            uintptr_t;
#endif

可以看到注释是: Types for `void *’ pointers. 那么这是什么含义呢?

我们知道所谓的指针,其实是内存的地址,而内容是该地址内存中实际存储的数据。void *是指无类型指针,当需要进行转化时,这个类型可以被安全的在 void * 和整数间转换,而不会出现由于指针和整型的字宽不同导致的问题。

C语言中,指针和整数之间的转换经常用到(多用于需要精确控制数据在内存中的精确布局时),在32位平台上,由于指针类型的字宽和int相同,所以我们不太在意这个问题。但是到了 64 位平台上,由于目前几乎所有64位系统都采用LP64模型,既整数依旧是32位,而指针是64位的。intptr_t 这个数据类型就成了安全跨平台编程的保证。也就是说,当你需要把指针作为一个整数来运算时,转换成 intptr_t才是安全的,可以在运算完毕安全的转回指针类型。

本文的评论功能被关闭了.