问题标签 [memory-address]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
150472 浏览

memory-management - 逻辑地址和物理地址的区别?

我正在阅读操作系统概念,我在第 8 章!但是,我可以使用一些澄清或保证我的理解是正确的。

逻辑地址:根据本书,逻辑地址是由 CPU 生成的。这到底是什么意思?(在执行生成的地址系统中..)我假设为程序编译代码时,程序知道代码将在内存中加载到哪里。编译器所做的只是设置程序布局的一般草图以及图像的布局方式,但不会为其分配任何实际地址。当程序执行时,CPU 获取编译器制作的布局图像,并将一些地址(逻辑地址)分配给从代码生成的地址。

物理地址:直到 CPU 生成一组逻辑地址(由基地址和偏移量组成)之后才会生成物理地址。逻辑地址通过 MMU 或其他设备,并且沿线路的某处将逻辑地址映射到物理 RAM 地址。

那么实际的区别是什么?我可以看到一个好处。使用逻辑地址给应用程序更多的自由。如果物理地址是硬编码的,那么程序的成功将在很大程度上取决于物理计算机、可用的 RAM 地址等。

使用转换为物理地址的逻辑地址不是强加了两个步骤而不是一对一,因此不是更多的开销吗?

那么逻辑地址在生成后驻留在哪里?当 CPU 为进程提供服务时,它们可能存在于 CPU 上的寄存器中,但在此之前和之后,它们会去哪里?我知道这取决于实现。我假设它们可能存储在 CPU 上的某些特殊寄存器空间或缓冲区中,例如 TLB,对吗?如果不是,那么该表可能存在于实际的 RAM 本身中,并且 CPU 仅保存指向 RAM 中表的基地址的指针/地址,对吗?

将地址保存在 RAM 中似乎与逻辑内存地址的目的相反。我只能假设我的理解是不正确的。

0 投票
2 回答
2418 浏览

c - 为什么 main 函数总是加载在同一个地址,而变量大部分时间都有不同的地址?

我今天写了这个小程序,结果让我大吃一惊。这是程序

在我的机器上,主函数总是加载到地址“0x80483d4”并且变量的地址不断变化这是怎么发生的?我在操作系统中读到,作为虚拟化方案的一部分,操作系统不断重新定位指令的地址。那么为什么每次我运行这个程序时,main 都加载到同一个地址?

提前谢谢你们。

0 投票
1 回答
70 浏览

variables - 如何在gdb中获取某个变量的地址

如何使用命令行获取 gdb 中某个变量的地址。

编辑 :

它在构造函数中不起作用。

0 投票
9 回答
337 浏览

c - C 指针 - 不同的地址

我正在尝试了解 C 指针,但我无法理解某些内容......以下代码:

为什么地址不一样?第一个printf(主)输出两个地址。另一个printf(foo)输出不同的地址。我将地址传递给 foo (& 运算符)。

0 投票
2 回答
27773 浏览

assembly - “DS:[40207A]”在汇编中是什么意思?

是什么DS:意思?

0 投票
4 回答
1170 浏览

memory - 内存地址中的位

在使用免疫调试器在 Windows XP 32 位上进行调试时,我在堆栈上看到以下内容:

我的理解是每个地址位置都包含 8 位。

这个对吗?

0 投票
3 回答
3426 浏览

ruby - Ruby 中的对象地址

简短版本:类 的默认inspect方法显示对象的地址。* 如何在inspect我自己的自定义方法中执行此操作?

*(要清楚,我想要你通常会得到的 8 位十六进制数inspect。我不关心实际的内存地址。我只是称它为内存地址,因为它看起来像一个。我知道 Ruby内存安全。)

长版: 我有两个课程,Thing并且ThingList. ThingListArray专门设计用于保存事物的子类。由于 Things 的性质以及它们在我的程序中的使用方式,Things 有一个实例变量@container,它指向ThingList保存Thing.

两个事物可能具有完全相同的数据。因此,当我调试应用程序时,我能够可靠地区分两个事物的唯一方法是使用inspect,它会显示它们的地址。但是,当我inspectaThing时,我会得到一页又一页的输出,因为inspect将递归检查@container,导致列表中的每个事物也被检查!

我需要的只是该输出的第一部分。我怎样才能编写一个自定义inspect方法Thing来显示这个?

编辑: 我刚刚意识到默认值就是to_s这样做的。我之前没有注意到这一点,因为我有一个自定义to_s,可以提供有关对象的可读详细信息。

假设我不能使用to_s,我必须编写一个自定义inspect

0 投票
5 回答
981 浏览

c++ - c ++:字符串常量的地址

我可以在 g++ 中将对象的地址作为字符串常量获取吗?例子:

如果&x == 1234,那么我需要"1234"在我的代码中。

编辑

字符串常量是指我在编译或链接时需要该常量字符串。我需要将它嵌入到这样的内联汇编代码中:

我不知道用预处理器宏构造损坏名称的方法,所以我问了这个问题。

解决方案不需要是可移植的,g++就足够了。

该地址本身在编译或链接时是已知的,因为它可以检查汇编输出并将损坏的名称放入内联汇编指令中。

0 投票
4 回答
17199 浏览

c# - GCHandle 获取 .net 对象的地址(指针)

我设法通过

我可以通过

好吧,目的是将地址存储在本机类中,并具有有关哪个本机对象与哪个 .net 对象相关的信息。
AFAIK地址不会因为分配而改变,这是真的还是有人有更好的主意来服务我的目的?

谢谢

0 投票
1 回答
562 浏览

memory - Nehalem 内存架构地址映射

给定具有 12GB RAM (6x2GB) 的 2 处理器 Nehalem Xeon 服务器,内存地址如何映射到物理内存模块?

我想在具有 3 个相同内存模块的单个处理器 Nehalem 上,地址空间将在模块上进行条带化,以提供更好的内存带宽。但是有什么样的条纹尺寸?第二个处理器(+内存)如何改变这种情况?