for c windows pointers handle

for - puntero vs manijas en C(¿se usan los términos para transmitir cosas por separado?)



mouse pointers for windows 10 (15)

"Manejar" es un término lógico, no físico. Está pensado como un proxy para un objeto físico para codificar que tiene un conocimiento más íntimo del objeto. Un puntero a una estructura es uno de esos proxy, pero hay muchas otras posibilidades.

Recientemente, leí un documento de un individuo que se refiere a un puntero a una estructura como un identificador. El autor era claramente alguien que había escrito código C en la plataforma de Windows anteriormente. La búsqueda en Google indica que los programadores de Windows interactúan con los componentes del sistema a través de los manejadores. Me pregunto si es una práctica común que los programadores de Windows se refieran a todos los punteros de estructura como identificadores. ¿O es el término manejador destinado a transmitir algo más allá del puntero a la estructura? Estoy preguntando como programador de Linux C

El libro blanco al que me refiero es: Duff, Heroux y Pozo. Una descripción general de los subprogramas de álgebra lineal básica dispersa: la nueva norma del Foro Técnico de BLAS. ACM Transactions on Mathematical Software, Vol. 28, No. 2, junio de 2002, páginas 239-267.


Como hace referencia a los controladores que se utilizan como punteros a una estructura, tal como los utiliza un programador de Windows, responderé dentro de ese contexto. Tenga en cuenta que claramente hay muchos tipos diferentes de "manejadores", ya que es un concepto genérico ampliamente utilizado en el entorno informático. Ciertamente, usted estará familiarizado con el concepto de un identificador de archivo; Windows también ofrece manijas de ventana y muchos otros tipos de manijas. Una vez dicho esto:

Un "identificador de memoria" (que es similar a un puntero a una estructura) es un concepto de la programación de Windows de 16 bits, donde no había un administrador de memoria en la CPU y toda la administración de la memoria tenía que hacerse en el software. Esencialmente, un "identificador" era una especie de puntero, pero el sistema operativo sería libre de moverse por la memoria a la que se refería el identificador. No puede hacer eso con un puntero normal, pero el identificador tenía funciones que obtendrían y liberarían la dirección de memoria real .

Con la introducción de Win32, donde la CPU tenía un administrador de memoria de hardware, el concepto del identificador de memoria quedó obsoleto. Otros tipos de identificadores, como los identificadores de archivo y los identificadores de ventana, aún existen en Win32, pero no son punteros a estructuras.


El término "identificador" no se originó en Windows, aunque se generalizó entre los programadores de Windows.

En la biblioteca estándar de C (stdio.h), los manejadores de archivos son punteros a una estructura de datos utilizada por la biblioteca de C.

La programación de Pure Unix utiliza descriptores de archivo, que son índices en una estructura de datos del kernel, pero los punteros se han utilizado como identificadores en Unix durante más de 30 años.


El término identificador se usa para significar cualquier técnica que le permita acceder a otro objeto. Un identificador puede ser un puntero, una referencia, un puntero a un puntero, etc. Pero seguro que está relacionado con clases, objetos, etc. Por lo tanto, el identificador no siempre debe ser un puntero a la estructura.

-ANUNCIO.


En los viejos tiempos de la programación de MacOS, antes de OSX, un controlador era un puntero a un puntero. Eso permitió que el sistema operativo moviera las cosas sin invalidar los punteros del usuario. Había reglas sobre cuándo podríamos asumir que el objeto apuntado no se movería, lo cual no recuerdo.


En realidad, un puntero es una variable que contiene la dirección de otra variable, pero un controlador es un puntero a un puntero, es decir, un puntero que contiene la dirección de otro puntero FOR EX:

int x=10; int *a=&x;// this is a simple pointer int *b=a;// this is a handle


Los identificadores generalmente son indicadores que no es necesario eliminar directamente. Más bien, los pasa a las llamadas a la API que operan en las estructuras subyacentes.

Históricamente en Windows, los manejadores no eran punteros. Debería bloquear el controlador para obtener un puntero antes de usarlo y desbloquearlo cuando haya terminado (y el puntero se volvería inválido). En los días previos a la memoria paginada, Windows de la vieja escuela hizo su propia administración de la memoria al intercambiar los recursos a los que solo se hace referencia en las asas y volver a intercambiarlos cuando se bloquearon. En la práctica, esto hizo que la administración de la memoria se convirtiera en una pesadilla, pero permitió que Windows simulara la memoria virtual en sistemas sin soporte de hardware para ello.


No, no es muy común entre los programadores de Windows referirse a los punteros como manejadores, pero hacerlo tampoco es INCORRECTO. El término "identificador" se usa generalmente para describir algo que se usa para acceder a través de algo, y en ese sentido son todos los identificadores de punteros (pero no todos los identificadores son punteros). Los identificadores de Win32 son AFAIK generalmente no son punteros, sino índices de tablas internas del sistema operativo, pero esto podría cambiar en futuras versiones de Windows.


Probablemente sea mayor que la mayoría de los encuestados, habiéndome ganado la vida en codificación en C tanto en la versión temprana (finales de los 80) de Macintosh como en Windows de 16 y 32 bits. En aquellos tiempos antiguos (cuando un mainframe de IBM podría tener solo 256k de memoria), un controlador siempre era un puntero (o desplazamiento de tabla) a un puntero de memoria.

Como mencionó un encuestado anterior, eso permitió que las tablas de punteros a los bloques de memoria fueran administradas por el sistema operativo sin invalidar los "manejadores" utilizados por el programador. Desafortunadamente, no recuerdo cómo garantizamos que un bloque asignado no se movería mientras usamos el manejador.


Un identificador es un término genérico para una referencia (no específicamente una referencia de C ++) a un objeto.

Un puntero es un subconjunto de manejador , ya que apunta a objetos.

Una clave foránea en una base de datos también es un identificador, ya que apunta a registros en otras tablas; Y no es un puntero.

En el entorno de la API de Windows, utilizaron el término abstracto manejador para poder usar un número entero en una tabla, un puntero u otros métodos, sin interferir con el cliente; IOW, definiendo una interfaz abstracta.

En resumen, un identificador puede ser algo más que un puntero, como un índice de entero o un objeto que contiene más detalles sobre el objeto (como un puntero inteligente).


Un mango es un concepto antiguo y venerado.

Una galleta es lo mismo. O un GUID. O un boleto para recuperar su automóvil de un estacionamiento, o su abrigo de un elegante restaurante, etc.

Es cualquier valor único que, cuando se presenta al emisor, se puede utilizar para rastrear al objeto real referido, por cualquier mecanismo opaco que el emisor desee. Puede o no saber algo acerca de ese proceso, ni lo que es la cosa subyacente, exactamente (solo conceptualmente).

Fue muy utilizado por Windows, pero ciertamente no es exclusivo de Windows.

Normalmente no usaría "manejar" para significar "puntero a estructura". La manija es más como "token" que como "puntero". Se refiere a algo: archivo, recurso del sistema, memoria, instantánea de estado, etc. Pero lo que es exactamente se basa en el contexto del identificador en sí (es decir, quién lo emitió).

Las asas también se utilizaron mucho en la programación temprana del sistema de archivos en K&R C.


Un puntero es definitivamente diferente a un mango. Un puntero es una dirección de algo no especificado en la memoria. Un puntero a una estructura se puede llamar "manejador" (generalmente usando ''typedef'').

Un identificador es un concepto utilizado para escribir el sistema operativo Windows. Un puntero es una parte del lenguaje C.


Utilizo la palabra mango para indicar un puntero que apunta a un "objeto" que representa un recurso, a menudo un recurso del sistema operativo, mientras que un puntero solo apunta a algo de memoria. Si tiene un identificador de algo, no debe intentar leer y escribir bytes en él directamente, sino manipularlo mediante los métodos proporcionados.

A menudo, las asas se implementan como un void * opaco void * , lo cual es un estímulo adicional para no tratar de desreferirlo directamente.


Windows define manejadores para muchas cosas. No son necesariamente apuntadores en absoluto, algunos lo son, pero otros son cosas como compensaciones en tablas particulares. Algunos están intencionalmente ofuscados. Hay manejadores para todo, desde ventanas a contextos de dispositivos hasta mapas de bits, y así sucesivamente.

En cualquier caso, un identificador normalmente está pensado como un tipo de datos opaco, es decir, se supone que no debe saber nada sobre su valor, solo un conjunto de operaciones predefinidas que pueden usarlo para realizar diversas tareas. Creo que C ++ / CLI también tiene un objeto parecido a un puntero que se llama un identificador. Sin embargo, creo que se supone que debe estar más cerca de un tipo de datos opaco: si la memoria sirve, no se le permite hacer ninguna aritmética de punteros.


El término manejador generalmente significa algún valor opaco que tiene significado solo para la API que lo produjo. En Win32, el tipo HANDLE es un puntero en la memoria del kernel (que las aplicaciones no pueden acceder de todos modos) o un índice en alguna matriz interna del kernel.