看leveldb代码时候发现inptr_t居然不知道是啥,搜索了一番发现一个比较官方的解释:

尽管大部分程序员习惯自由使用标准类型, 如 int 和 long, 编写设备驱动需要一些小心来避免类型冲突和模糊的 bug.

这个问题是你不能使用标准类型, 当你需要"一个 2-字节 填充者"或者"一个东西来代表一个4-字节 字串", 因为正常的 C 数据类型在所有体系上不是相同大小. 为展示各种 C 类型的数据大小, datasize 程序已包含在例子文件 misc-progs 目录中, 由 O' Reilly's FTP 站点提供. 这是一个程序的样例运行, 在一个 i386 系统上(显示的最后 4 个类型在下一章介绍):

morgana% misc-progs/datasize
arch Size: char short int long ptr long-long u8 u16 u32 u64
i686       1    2     4   4    4   8         1  2   4   8

这个程序可以用来显示长整型和指针在 64-位 平台上的不同大小, 如同在不同 Linux 计算机上运行程序所演示的:

arch  Size:  char  short  int  long  ptr long-long  u8 u16 u32 u64
i386         1     2      4    4     4   8          1  2   4   8
alpha        1     2      4    8     8   8          1  2   4   8
armv4l       1     2      4    4     4   8          1  2   4   8
ia64         1     2      4    8     8   8          1  2   4   8
m68k         1     2      4    4     4   8          1  2   4   8
mips         1     2      4    4     4   8          1  2   4   8
ppc          1     2      4    4     4   8          1  2   4   8
sparc        1     2      4    4     4   8          1  2   4   8
sparc64      1     2      4    4     4   8          1  2   4   8
x86_64       1     2      4    8     8   8          1  2   4   8

注意有趣的是 SPARC 64 体系在一个 32-位 用户空间运行, 因此那里指针是 32 位宽, 尽管它们在内核空间是 64 位宽. 这可用加载 kdatasize 模块(在例子文件的 misc-modules 目录里)来验证. 这个模块在加载时使用 printk 来报告大小信息, 并且返回一个错误( 因此没有必要卸载它 ):

kernel: arch Size: char short int long ptr long-long u8 u16 u32 u64
kernel: sparc64    1    2     4   8    8   8         1  2   4   8

尽管在混合不同数据类型时你必须小心, 有时有很好的理由这样做. 一种情况是因为内存存取, 与内核相关时是特殊的. 概念上, 尽管地址是指针, 内存管理常常使用一个无符号的整数类型更好地完成; 内核对待物理内存如同一个大数组, 并且内存地址只是一个数组索引. 进一步地, 一个指针容易解引用; 当直接处理内存存取时, 你几乎从不想以这种方式解引用. 使用一个整数类型避免了这种解引用, 因此避免了 bug. 因此, 内核中通常的内存地址常常是 unsigned long, 利用了指针和长整型一直是相同大小的这个事实, 至少在 Linux 目前支持的所有平台上.

因为其所值的原因, C99 标准定义了 intptr_t 和 uintptr_t 类型给一个可以持有一个指针值的整型变量. 但是, 这些类型几乎没在 2.6 内核中使用.

总而言之就是:intptr_t是为了跨平台,其长度总是所在平台的位数,所以用来存放地址。

参考:http://www.cnblogs.com/Anker/p/3438480.html

/* There is some amount of overlap with <sys/types.h> as known by inet code */
#ifndef __int8_t_defined
# define __int8_t_defined
typedef signed char         int8_t;
typedef short int          int16_t;
typedef int               int32_t;
# if __WORDSIZE == 64
typedef long int          int64_t;
# else
__extension__
typedef long long int        int64_t;
# endif
#endif/* Unsigned.  */
typedef unsigned char         uint8_t;
typedef unsigned short int    uint16_t;
#ifndef __uint32_t_defined
typedef unsigned int          uint32_t;
# define __uint32_t_defined
#endif
#if __WORDSIZE == 64
typedef unsigned long int       uint64_t;
#else
__extension__
typedef unsigned long long int    uint64_t;
#endif
/* 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

intptr_t详解相关推荐

  1. OpenCV 畸变校正函数undistortPoints()与remap()详解及校正效果对比

    一.概述 前面写过一篇博客–"疑问:undistortPoints()与remap()畸变校正后,结果相差很大",博客中对比了OpenCV中自带畸变校正函数undistortPoi ...

  2. 详解S60 WebKit 21772编译教程

    S60 WebKit 21772编译教程是本文要介绍的内容,主要是来了解并学习S60 WebKit应用,具体内容的学习来看本文详解. 1.安装环境: perl jdk S60-SDK-0548-3.0 ...

  3. 深入理解计算机系统(CSAPP)含lab详解 完结

    文章目录 深入理解计算机操作系统-第一章 1.1 信息就是位 + 上下文 1.2 程序被其他程序翻译成不同的格式 1.3 了解编译系统如何工作是大有益处的 1.4 处理器读并解释储存在内存中的指令 1 ...

  4. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  5. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  6. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  7. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  8. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法

    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...

  9. CUDA之nvidia-smi命令详解---gpu

    nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...

最新文章

  1. 梯度的直观理解_梯度下降最直观的理解
  2. python导入xlsxwriter要安装什么吗_Python 模块:XlsxWriter 的使用
  3. expdp oracle 并行_关于Expdp/Impdp 并行导入导出详细测试结果和并行参数的正确理解!!...
  4. 修改 cmd 控制台默认代码页编码的几种方法【GBK、UTF-8】
  5. Go学习笔记—多线程
  6. 大数据文本分析的应用场景有哪些?
  7. 无法执行该VI,必须使用LabVIEW完整版开发系统才可以解决该错误
  8. python程序设计知识点汇总_Python入门知识点汇总
  9. Java Spring AspectJ
  10. V4L2应用程序框架--一【转】
  11. 二元偏导数存在的条件_偏导数连续怎么证明
  12. 第三章:数组[5常见算法]--[6反转]
  13. 牛客网项目1.7项目调试技巧
  14. 小球斜抛公式用C语言怎么写,利用C4droid绘制小球斜抛运动轨迹(考虑空气阻力)...
  15. JAVA学习笔记——BLOB类型和数据批量操作
  16. 仓储室内定位系统—企业物流的“数字化”转型
  17. linux宝塔面板打不开 ssh也连不上,SSH能访问,但是宝塔面板打不开,输入bt命令无任何反应!...
  18. 智合同丨AI智能审核工具
  19. Edit conflicts
  20. 最新饿了么、美团、大众点评技术面面试难点整理,看完长点心

热门文章

  1. 获取网页访问者的IP地址
  2. 莫提博客 - 简约优雅的个人博客系统
  3. GitHub: ProxyPool 爬虫代理IP池
  4. VR教育让学习变得简单而有趣,VR教育都有哪些优势?
  5. 51nod 1597 有限背包计数问题 DP 根号分治
  6. 输入日期查星座 php,php根据日期显示所在星座的方法,php日期所在星座_PHP教程...
  7. 实战派来了!聊聊百度智能运维的“前世今生” | 技术沙龙
  8. jsp基于java廉价房屋租赁管理系统
  9. 如何有效提升你的研究能力?
  10. StarSpace系列之一:tagspace