¿Puedo asignar una dirección de memoria específica usando punteros en C++?¿Puedo asignar una dirección de memoria específica usando punteros en C++?
Por ejemplo: Asigne esta dirección de memoria 25D4C3FA y ponga 4 en ella.
¿Puedo asignar una dirección de memoria específica usando punteros en C++?¿Puedo asignar una dirección de memoria específica usando punteros en C++?
Por ejemplo: Asigne esta dirección de memoria 25D4C3FA y ponga 4 en ella.
Asignando una dirección específica en el espacio de direcciones de su proceso es un poco complicado y específico de la plataforma. En los sistemas Unix, mmap()
es probablemente lo más cercano que va a obtener. El equivalente de Windows es VirtualAlloc()
. Por supuesto, no hay garantías ya que la dirección ya puede estar en uso.
escritura a una dirección específica es trivial:
char *p = (char*)0x25D4C3FA;
*p = 4;
que se supone que tiene buenas razones para querer hacerlo.
Suponiendo que al asignar en realidad se refiere a acceso,
Puede, pero si la dirección no es válida o no accesible, entonces deferencing la dirección dará lugar a un comportamiento indefinido.
Así que no es una buena idea hacerlo.
No, en C++ estándar no se puede. Puede establecer un puntero a 0x25f4c3fa e intentar usarlo, pero esto no es "asignar". –
@MatteoItalia: OP significa establecer un puntero en lugar de asignar aquí si lee el q completo. –
La pregunta es bastante ambigua, pero específicamente dice "asignar" varias veces. –
Puede solicitar una dirección específica a través de VirtualAlloc en Windows, y espero que otros sistemas operativos hagan lo mismo, pero no hay garantías ni medios independientes de la plataforma.
En Windows, sí.
pseudo-código:
Pointer desiredAddress = 0xD0000000;
//allocate 1 KB at our desired address
Pointer p = VirtualAlloc(desiredAddress, 1024,
MEM_COMMIT | MEM_RESERVE,
PAGE_READWRITE);
¿Por qué quieres hacer eso? (¿Estás en un entorno sin memoria virtual?) – Mat
Sí, ¿y si esa dirección ya está en uso? –
Esto es completamente específico de la plataforma, por lo que debe especificar a qué plataforma se dirige y por qué debe hacerlo. –