Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 安全地使用显式地址分配_C++_C - Fatal编程技术网

C++ 安全地使用显式地址分配

C++ 安全地使用显式地址分配,c++,c,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 这可能表明我有些无知

关于安全地使用显式数字作为指针地址,是否有任何类型的最佳实践?我指的是下面的例子:

#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当时没有被其他人使用,并且不会导致内存损坏?如果您不能假设,有没有安全的方法来硬定义要使用的地址?

假设是,如果您知道它的0x10000,那么您也知道什么时候是真的。通常这是用于硬件(我知道io端口5位于0x10000)或低级操作系统内核(引导映像由内核的另一部分在0x10000处加载)。如果你没有写这些东西,那么你就不应该写硬编码地址。假设你知道它的0x10000,那么你也知道什么时候是真的。通常这是用于硬件(我知道io端口5位于0x10000)或低级操作系统内核(引导映像由内核的另一部分在0x10000处加载)。如果你没有写这些东西,那么你就不应该写硬编码地址。如果你在Windows下运行,
VirtualAlloc
函数允许你指定一个推荐的基址。如果请求的区域是免费的,
VirtualAlloc
将使用该区域。但是,如果该区域正在使用,
VirtualAlloc
将选择不同的基址


对于linux(可能还有unix),您可以用同样的方法使用
mmap
函数,它会先尝试指定的地址,然后再选择其他地址。

如果您在Windows下运行,则
VirtualAlloc
函数允许您指定建议的基址。如果请求的区域是免费的,
VirtualAlloc
将使用该区域。但是,如果该区域正在使用,
VirtualAlloc
将选择不同的基址


对于linux(可能还有unix),您可以以相同的方式使用
mmap
函数-在选择不同的地址之前,它将首先尝试您给定的地址。

您可能会遇到一般情况,这不一定安全,当然不推荐。在现代操作系统上,您无法可靠地做到这一点。假设是,如果您知道它的0x10000,那么您也知道该假设何时成立。通常,这是针对硬件(我知道io端口5位于0x1000)或低级别操作系统内核(引导映像由内核的另一部分在0x10000加载)您是否为微控制器或类似设备开发的?这样做可能是安全的唯一方法是使用实现设备驱动程序。通常,您可能会遇到,这不一定是安全的,当然也不推荐。在现代操作系统上,您无法可靠地做到这一点。假设是,如果您知道它的0x10000,那么您也知道该假设何时成立。通常,这是针对硬件(我知道io端口5位于0x1000)或低级操作系统内核(引导映像由内核的另一部分在0x10000处加载)您是否为微控制器或类似设备开发的?唯一安全的方法是使用实现设备驱动程序。将尝试此方法。将尝试此方法。