c++ - C++中的指针与汇编语言中的指针之间的区别?

标签 c++ pointers assembly

此外,远指针和近指针......谁能详细说明一下?

在 C++ 中,我不知道指针在直接操作码级别或电路级别如何工作,但我知道它是内存访问其他内存,反之亦然,等等。

但是在 Assembly 中你也可以使用指针。

这里有什么值得了解的显着差异,还是相同的概念?它在低级微处理器特定程序集的助记符级别上的应用是否不同?

最佳答案

Near 和 Far 指针仅与 16 位操作系统相关。忽略它们,除非你真的真的需要它们。您可能仍然会在今天的编译器中找到用于向后兼容的关键字,但它们实际上不会做任何事情。在 16 位术语中,near 指针是一个 16 位偏移量,其中内存段已为上下文所知,far 指针包含 16 位段和一个 16 位偏移量。

在汇编程序中,指针只是指向一个内存位置。在C++中也是如此,但在C++中,内存可能包含一个对象;根据指针的类型,地址可能会改变,即使它是同一个对象。请考虑以下事项:

class A
{
public:
    int a;
};

class B
{
public:
    int b;
};

class C : public A, B
{
public:
    int c;
};

C obj;
A * pA = &obj;
B * pB = &obj;

pApB 不会相等!它们将指向 C 对象的不同部分;当您将指针从一种类型转换为另一种类型时,编译器会自动进行调整。因为它知道类的内部布局,所以它可以计算适当的偏移量并应用它们。

关于c++ - C++中的指针与汇编语言中的指针之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14635306/

相关文章:

c++ - OpenGL 两个屏幕

c++ - 保存二维 map 的好方法是什么

从概念上讲,为什么数组地址不可修改?

c++ - 关闭文件时会出现错误吗?

c++ - 在 C++ 中将大型文本文件快速读取为一维结构

c - 从单链表中删除条目

c - void 指针 = int 指针 = float 指针

assembly - 两个数字的 idivl,其中第一个数字小于第二个数字(在汇编中)

debugging - 如何在GDB中更改eflags寄存器值?

assembly - x86 代表前缀,计数为零 : what happens?