Windows上64位编程

arm64 Linux操作系统知识点 低地址存放:指向上一个栈 (父函数的栈)的栈基地址 FP,类似于链表的prev指针。应用程序要访问内核就必须通过系统调用层,内核可以在系统调用层对应用程序的访问权限、用户类型和其他一些规则进行过滤,以避免应用程序不正确地访问内核。高地址存放:当前函数的返回地址,也就是进入该函数时LR的值,本书把这个地址称为P_LR(Previous LR)。在函数执行时,FP和SP寄存器会指向该函数栈空间的FP处。4. 函数返回时,ARM64处理器先把栈中的P_LR的值载入当前LR,然后执行RET指令。 阅读详情

Windows上64位编程- -

                                      

 

C/C++仅仅定义了这些基本数据类型之间的关系,并没有定义严格定义它们的字长。在不同的平台上,根据编译器不同的实现,它们的字长如下表所示:

 数据类型

LP64

ILP64

LLP64

ILP32

LP32

 char

8

8

8

8

8

 short

16 

16

16

16

16 

 _int32

N/A

32

N/A

N/A

N/A

 int

32

64

32

32

16

 long

64

64

32

32

32

 long long

N/A

N/A

64

N/A

N/A

 pointer

64

64

64

32

32

在这张表中,LP64,ILP64,LLP64是64位平台上的字长模型,ILP32和LP32是32位平台上的字长模型。

LP64意思是long和pointer是64位,ILP64指int,long,pointer是64位,LLP指long long和pointer是32-bit的。ILP32指int,long和pointer是32位的,LP32指long和pointer是32位的。

32位Windows采用的是IP32数据模型,64位Windows采用的是LLP64数据模型。
所以,Windows上的32位程序设计和64位程序设计最大的不同(也就是IP32和LLP64的不同),就在于指针的长度不同??由32位变成了64位。
 
Win32 API在很多情况下,都需要将整数转换成指针或者相反。在 32 位的硬件上不会有问题,其中指针的大小和整数的大小是相同的,但在 64 位的硬件上却完全不一样。
 
为此M$搞了个所谓的“多态类型”:

对于特定的精度,您可以使用固定精度的数据类型。不管处理器的词大小如何,它们的大小都是一致的。大多数这些类型都在它们的名称中包含精度,可以从下面的表中看出:

表 1. 固定精度的数据类型
类型定义

DWORD32           

32 位无符号整数

DWORD64

64 位无符号整数

INT32

32 位有符号整数

INT64

64 位有符号整数

LONG32

32 位有符号整数

LONG64

64 位有符号整数

UINT32

无符号 INT32

UINT64

无符号 INT64

ULONG32

无符号 LONG32

ULONG64

无符号 LONG64

此外,当您需要数据类型的精度随着处理器词大小变化时,请使用指针精度数据类型。这些类型又称为“多态”数据类型。这些类型通常以 _PTR 后缀结尾,如下面的表格所示:

表 2. 指针精度的数据类型
类型定义

DWORD_PTR             

指针精度的无符号长类型

HALF_PTR

指针大小的一半。用于包含一个指针和两个小型字段的结构中

INT_PTR

指针精度的有符号整型

LONG_PTR

指针精度的有符号长类型

SIZE_T

指针可以引用的最大字节数。用于必须跨指针的整个范围的计数

SSIZE_T

有符号 SIZE_T

UHALF_PTR

无符号 HALF_PTR

UINT_PTR

无符号 INT_PTR

ULONG_PTR

无符号 LONG_PTR

LPARAM

与 LONG_PTR 为同义词,(在WTypes.h 中定义)

WPARAM

与 UINT_PTR 为同义词,(在 WTypes.h 中定义)

通过整数参数传递参数或上下文信息的所有 Win32 API 都更改为使用这些新的类型。

此外,还出现了定长指针:POINTER_32和POINTER_64:
#define POINTER_32 __ptr32
#define POINTER_64 __ptr64
PS:M$DN中说是在Basetsd.h中定义的,但实际上是在WinNT.h中定义的。 
从零到一:ASTER L2数据获取的实战避坑指南 本文提供了一份详细的ASTER L2数据获取实战指南,涵盖账号注册、环境配置、数据检索、下载故障排除及后处理等关键步骤。特别针对NASA EarthData平台的隐形门槛和常见陷阱,给出了实用解决方案,帮助科研新手高效获取地表温度数据,适用于环境监测和城市热岛效应分析等领域。 阅读详情

相关推荐

【YOLOv11改进[Backbone]】 使用Ghostnetv2替换Backbone

使用Ghostnetv2替换Backbone

静谧、淡雅 486

LP32,ILP32,LP64,LLP64,ILP64数据模型

在3264平台上,long, int, 和指针类型变量所占字节数常常有所区别,本文介绍了几种数据模型和它们在不同平台上的字节数

simple的博客 2925

Windows应用程序编程指南 pdf

Windows应用程序编程指南 pdf 但是可以导出为文本 方便阅读

C/C++的64整型 zz

//为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数//结果VC中还是认为是32的,显然不合适//typedef signed long int TSint64;//typedef unsigned long int TUint64;//ANSI C中规定long long才能表示64//参见:http://msd

hi 2万+

一文看懂3264系统各类型长度——数据模型

一文看懂3264系统各类型长度——数据模型

weixin_36389889的博客 2514

C++数据类型和VTK里的数据类型

C++数据类型和VTK里的数据类型 1、参考链接 C++ 数据类型 type: ************size************** bool: 所占字节数:1 最大值:1 最小值:0 char: 所占字节数:1 最大值: 最小值:? signed char: 所占字节数:1 最大值...

weixin_42040046的博客 871

小试一把 64 Windows 编程

环境:Windows 2003 Server x64 Edition, Visual Studio 200564-bit 的编程模型有很多种(LP64、LLP64、ILP64),Windows x64 版采用的是 LLP64 模型:int、long 都是 32-bit,void* 是 64-bit,新增数据类型 long long,也是 64-bit。我写了个 console

陈硕的Blog 6658

Windows编程】如何判断操作系统是64还是32

我为我基础知识掌握的薄弱,感到深深的“折服”。感觉从知识体系的掌握上就有问题!!需要探索性的改进自身的知识架构。加油吧……   一,不同数操作系统下类型简介   类型 32操作系统(字节) 64操作系统(字节) char 1 1 short 2 2 int 4 4 long 4 8 long  lo

小田的专栏 7303

WINDOWS_3264系统的编程差异

win32,win64编程永恒;语言编程需要注意的64和32机器的区别 一、数据类型特别是int相关的类型在不同数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较: 16平台 char      1个字节8 short        2个字节16 int         2个字节16 long      4个字节32 指针      

痞子龙3D编程 7824

64编程模型:为什么要使用LP64(二)

原文出自这里 评价标准 上一部分中描述的关于编程模型的选择可以由各个操作系统厂商自己决定,或者在各个操作系统厂商之间制定共同的标准。我们认为在开放式系统社区,64系统的实现方式上如果有一个单一的标准,将有助于开发者提供更好的应用程序。这样的话可以在应用程序移植到64环境的过程中避免很多问题,从而促进新技术的更快发展。并且现在正是一个制定统一标准的好机会,因为目前已经有6

XanaduT的专栏 1191

win 并口编程

示例工程下载  WinIo库下载   目前,在实验室和工业应用的各种控制系统中,串口是常用的计算机与外部控制系统之间的数据传输通道。由于串行通信方便易行,所以应用广泛。但是使用串行通信,在实时性、速度、数据量等方面受到限制。而计算机的并行端口传输数据时是一次性传送8个(一个字节)或更多,由于传输量较大,因此数据的传输速度要比串口快,在许多必须讲究传输速度的控制系统里,用PC并行端口与之连

darling757267的专栏 4487

C语言3264编程注意事项

1.ILP32和LP64数据模型 32环境涉及"ILP32"数据模型,是因为C数据类型为32的int、long、指针。而64环境使用不同的数据模型,此时的long和指针已为64,故称作"LP64"数据模型。 Data type Data length(32bit) Data length(64bit) Signed...

u012588160的博客 5318

C/C++基本数据类型

参考资料: (1) 64与32编程的数据类型区别(C/C++): http://blog.csdn.net/harbinzju/article/details/5785024 (2) 指针运算: http://blog.csdn.net/hbuxiaoshe/article/details/5785575     C/C++仅仅定义了这些基本数据类型之间的关系,并没有定义严格定义...

chuanwang66的专栏 276

C++ 随笔(仅针对64window系统)

64window系统中 1字节(8): (unsigned) char 2字节(16):(unsigned) short int 4字节(32):(unsigned)(long) int和float 8字节(64):double 16字节(128):long double 以U/u、L/l、F/f结尾可以表示无符号型、长型、浮点型常量。 标识符:不能使用字母、数字、下划线之外的字符,首字符不能是数字。 C++对字符使用单引号,对字符串使用双引号,例如"S"表示由’S’和’\0(空字符)'两个字

qq_41724123的博客 632

基于Vue+Springboot的学生信息管理系统源码.zip

基于Vue+Springboot的学生信息管理系统源码.zip

上一篇: C++ 判断64位和32位系统
下一篇: 编程细节上的检查
ZLMSDN
博客等级 码龄21年 14粉丝 21原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值