在内存和HEX地址中分配堆

时间:2013-06-07 03:07:11

标签: hex

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

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

1 个答案:

答案 0 :(得分: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中没有很好的方法可以跟踪已分配内存的大小(通常是这样),所以你必须自己考虑这个方面。