首页 > 解决方案 > 如何使用 malloc 或其他函数在 Ram 中分配所需的地址?

问题描述

我在 C 语言面试中被问到一个问题。问题是:我可以更改地址吗?

结构节点 * 根;root=(int*)malloc(sizeof(int));

printf("%d",root) =10128000 // 新地址:root=101590000

标签: cdata-structureslinked-listmallocdynamic-memory-allocation

解决方案


C 标准库的分配函数都不允许您指定要分配空间的地址。这样做是没有意义的,因为程序员不太可能知道或关心他们得到的具体地址,除非他们知道的东西已经在那里,在这种情况下它不是可用的地址。

但是,您可以分配一个大块(例如via malloc),然后根据需要手动分配该块的块。这使您可以选择相对于已分配块的基址的自己的地址。例如:

my_node *node_base = malloc(AS_MUCH_MEMORY_AS_I_NEED);

// ...

// malloc analog:
size_t an_index = choose_a_node_index_by_some_criteria();
my_node *node = node_base + an_index;

// free analog:
mark_index_available_again(an_index);

当然,魔鬼在细节中,这些都是针对您的需求的,并且比我准备在这里介绍的要复杂得多。总的来说,这不是一个自称是初学者的真正应该尝试做的事情。


推荐阅读