qword在那个头文件

qword在那个头文件,第1张

自己定义个头文件声明下,Windows,VC在windef.h下有这些定义:

typedef unsigned long DWORD

typedef int BOOL

typedef unsigned char BYTE

typedef unsigned short WORD

typedef float FLOAT

typedef FLOAT *PFLOAT

typedef BOOL near *PBOOL

typedef BOOL far*LPBOOL

typedef BYTE near *PBYTE

typedef BYTE far*LPBYTE

typedef int near*PINT

typedef int far *LPINT

typedef WORD near *PWORD

typedef WORD far*LPWORD

typedef long far*LPLONG

typedef DWORD near *PDWORD

typedef DWORD far *LPDWORD

typedef void far*LPVOID

typedef CONST void far *LPCVOID

typedef int INT

typedef unsigned intUINT

typedef unsigned int*PUINT

不可以。

是。

是。

你这个疑问就实际上涉及到了编译技术。this指针你会发现他是C++的关键字凯烂,而不是在那个头文件里声明的变量。也就是说,this指针并不是一个真实存在的C++语言变量,“父类指针不能自动(隐式)转换为子类指针”实际上是C++语言的变量类型规则,但this指针并非一个变量,所以不需要遵循此规则。从执行中的程序来说,this指针是帮助函数确定对象的位置。

如果非要问,this指针到底是储存在哪里?你去看百度百科,它是这样说的“不存在所谓的this的“位置”,只是this表示了对象的存储位置而已。&this违反语义规则,是错误的用法,不会编译通过。”当然,这是从C++语言的层面上来谈。在程序运行中,其实确实是有一个地方储存this指针的值的,不过这只有在非静态函数被调用才存在的。在X86处理器中,储存这个值的地方是寄存器ecx,X86-64储存这个值的地方是rcx。下面给出例子。

void G(IA* a)

{

a->F()

}

这段对应的汇编语言重点如下:

mov     rcx, [rsp+28h+arg_0] <——这里就是把对象的首地址(就是变量a的值)放在rcx中。

call    qword ptr [rax]              <——调用F()函数。

virtual void F()

{

    this->member++

}

mov     [rsp+arg_0], rcx        <——将rcx(其实就是所谓this指针)压进栈以防rcx寄存器有他用。

mov     rax, [rsp+arg_0]

mov     eax, [rax+0Ch]          <——通过this指针找到成员变侍带量member的位置。

inc     eax                             <——执行自增 *** 作。

看到了老孙芦吧,this指针不过就是类成员函数被调用时,被临时储存到rcx寄存器的对象首地址。

之所以啰嗦这么多,意思就是让你明白(如果你被上面所述搞得一头雾水),从程序实际运行的角度上看,this指针与其说是C++的指针,还不如说是编译技术里的东西,汇编/机器语言里根本没有类型一说(当然,机器最多分整数运行储存单元和浮点数运算储存单元),自然不存在什么类型转换了。

字这个概念,非常有意思

字呢,没有正统被规定过到底是什么意思

但是根据微软的习惯,慢慢这种叫法也被延续了下来,在微软的数据命名中

一个字节的叫字节,两个字节的叫WORD,4个字节的叫DWORD,8个字节的叫QWORD

另外吵逗还有一个概念 ,叫 “字长”

字长,一般来讲是CPU能单次处理的数据长度,基本上就等于是通用寄存器的长度

至于历史上为什么把两个字节叫成WORD,很可能跟历史贺斗原因有关,8086 这块CPU是16位CPU,当初DOS盛行,在那个年代 字=WORD=2字节

这种叫法很可能因为微软头文件里的数据类型命名(WORD,DWORD,QWORD)而保留至今

可能因为这个关系,现如今一个字,还是被通常认为是2字节

但是严格来讲,字=字长=CPU通用寄存器长度

所以,字,这个概念,本来就是有歧义的,你明白其中原理就行,不升拍卖用在乎到底是什么意思,你贴的图里,它就是1个机器字长的意思


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12168548.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存