安全地使用显式地址分配

时间:2014-08-14 20:20:39

标签: c++ c

对于安全地使用显式数字作为指针地址,是否有任何类型的最佳做法?我的意思是以下例子:

#define BASE_ADDRESS  0x10000

typedef struct my_var_list
{
   int var1;
   int var2;
} my_function_list;

my_var_list *MyVars;
MyVars = BASE_ADDRESS;    // Set the address of MyVars to be 0x10000

这可能表明我的一些无知,但你怎么能保证0x10000当时没有被其他东西使用而且你不会导致内存损坏?如果你不能假设,是否有任何安全的方法来定义一个地址?

2 个答案:

答案 0 :(得分:5)

假设如果你知道它的0x10000那么你也知道什么时候是真的。通常这是硬件(我知道io端口5是0x10000)或低级OS内核(引导映像由内核的另一部分加载到0x10000)。如果你不写这些东西,那你就不应该做硬编码地址

答案 1 :(得分:1)

如果您在Windows下运行,VirtualAlloc功能允许您指定推荐的基地址。如果请求的区域是免费的,VirtualAlloc将使用该区域。但是,如果该区域正在使用中,VirtualAlloc将选择不同的基址。

对于linux(也许是unix),你可以用同样的方式使用mmap功能 - 在选择不同的地址之前先尝试你的指定地址。