-1

我是编程的新手,试图理解计算机中内存分配的概念。假设我有一个 0x0F342 的十六进制地址,我想分配一个 1 kB 的堆,并将其作为最低地址。如何将 1kB 添加到 0x0F342?十六进制地址究竟代表什么?字节,位?

编辑:我的问题不是我试图分配内存,而是试图自己找出 HEX 地址。我只是想知道,如果你有 0xF432,那么 1kB 的地址是什么?如果我在 0xF432 有一个 1 字节的元素,那么下一个字节的地址是什么?感谢大家!

4

1 回答 1

0

如果您告诉我们您正在使用什么平台,您会得到更好的答案。我将用 C 来回答,因为这相当容易,这个问题对 Java 没有意义,而用汇编程序解释会困难得多。


嗯,这是误解的一个很好的例子。您不应该从事分配内存的业务——最好留给运行时库(C 中的 malloc() ,Java 中的 new 等)。

他们返回的地址可能类似。这只是内存中的一个位置,就像街道地址是从街道到房子的位置一样,但由于有数百万字节可用,它们使用比“123”更大的符号。

要获取此地址,您将使用malloc(内存分配)之类的方法,并告诉它您想要多少内存。假设您要存储一个整数。这通常是 2 个字节,但在某些平台上可能是 4 个字节,所以我们将计算它:

malloc( sizeof( int));

这可能会返回一个地址0x0f342

因此,您可能会说“在地址0x0f342,我想存储值4”。但这很麻烦,而且由于地址可能在执行周期的各个点发生变化,我们使用了一个变量,称为指针。

int *myInt;
myInt = malloc( sizeof(int));
*myInt = 4;

上面写着“将以下*变量视为地址,并将分配的值存储在它指向的这个位置”(因此,一个指针)。现在我们甚至不需要跟踪具体地址!

不幸的是,C 中没有好的方法来跟踪分配内存的大小(通常),所以你必须自己考虑这方面。

于 2013-06-07T03:21:01.050 回答