2012-05-09 17 views
20

He encontrado ATOM tipo en el Win32api y también en la API de Acrobat hay ASAtom.¿Cuál es el tipo de datos "átomo"?

Por lo que puedo decir, los átomos son claves para una tabla hash por lo general de cadenas para permitir una búsqueda rápida y compartir datos entre las aplicaciones. ¿Es correcto y cuál es la etimología del tipo de átomo?

EDITAR

Después de una cierta amplitud de la búsqueda me di Prolog utiliza átomos, así que debe haber algún origen de esta palabra. Parece que se utiliza para referirse a cualquier pieza de datos.

+3

Sí, hay un origen en la palabra. Viene de la palabra griega * ἄτομος * (* atomos *), que significa * "indivisible" *. (lengua en la mejilla ...) – Mehrdad

+2

Creo que X11 también tenía el concepto de Atom: permitir que la aplicación del cliente almacene un dato en el servidor X. – John3136

+1

@Mehrdad: Eso ayudó mucho, explicaría por qué un 'ATOM' se define como' typedef WORD ATOM' porque una palabra es la unidad direccionable de la CPU (es decir, no divisible). –

Respuesta

10

ATOM es una primitiva de 16 bits similar a un controlador de Windows. Su valor es completamente opaco para el modo de usuario. No es un puntero o un índice.

typedef unsigned short ATOM;

+1

Supongo que son generar d usando alguna función hash interna? –

+6

No. Son índices en una tabla de manejador en modo kernel. Son deliberadamente opacos porque filtrar los punteros del modo kernel al modo de usuario es una violación de la seguridad. – SecurityMatt

+0

Gracias fue útil. Parece que Windows usa átomos internamente para almacenar y recuperar cadenas de manera eficiente. –

3

Lo primero que puedo encontrar sobre el término "átomo" es del lenguaje de programación Lisp (source). Sin embargo, probablemente vino originalmente de mathematical logic. En la programación también se les llama Symbols y en su forma más simple son enteros de nombre (un tipo enumerado en C sería un ejemplo). Sin embargo, son ampliamente utilizados en muchos lenguajes de programación y en la API de Win32 y la API de Acrobat son identificadores de cadenas en una tabla.

Además, como Mehrdad señala, el significado original en griego es "indivisible", por lo que implican un tipo de datos primitivos que no se pueden desglosar más.

+3

Es por eso que el nombre de un átomo (la cosa física/química) es posiblemente incorrecto. –

+0

Una buena explicación hace para aprender. – Paul

0

El RegisterClass/RegistrClassEx funciones (y algunos otros) devuelven un ATOM tipo de datos.

el átomo identifica de forma exclusiva la clase que se está registrado, pero si la función falla, devuelve cero, lo que puede probar si la función ha fallado como esto

ATOM a=0; 
. 
. 
a = RegisterClassEx(your_window); 
if (0==a) 
    { 
    //code for function failed 
    } 
4

En cuanto a la etimología del nombre ATOM, Sé que una vez lo he visto en una antigua documentación de Microsoft Win32 API que es un acrónimo de "A ccess aM emory" o algo así. Es un término usado para identificadores numéricos simples (otro nombre es "identificadores") que representan algunas estructuras internas de datos en el sistema.

Por razones obvias, no sería inteligente dar al usuario indicaciones directas sobre estas estructuras. Primero, porque residen en el espacio del núcleo, y segundo, porque viola la encapsulación. El usuario podría simplemente liberar la memoria que no le pertenece, o sobrescribirla, o algunas otras ideas estúpidas. Entonces, el sistema operativo simplemente le da una etiqueta de número de reemplazo (que es el ATOM), que luego podría usarse para solicitar los datos del sistema. También es más rápido para el usuario pasar el pequeño número en lugar de toda la enorme estructura de datos. Los usuarios no necesitan preocuparse por las asignaciones de memoria &, o acceder a algunos datos a través de punteros que ya no son válidos, lo que podría simplemente bloquear sus programas.

+0

* Los usuarios no necesitan preocuparse por las asignaciones de memoria ... * Sabes que también las tablas ATOM tienen límites, esto es especialmente cierto para la tabla global de átomos. – Wolf

+1

Me has malinterpretado. No estaba hablando de asignación * espacio *, sino de asignación * método *. Es decir, los usuarios no tienen que preocuparse por cómo asignar memoria para estos objetos y dónde, no necesitan lidiar con todo el alboroto de la asignación, liberación y comprobación de punteros no válidos. Pero, por supuesto, todavía deben preocuparse por la cantidad de memoria que asignan a sus recursos. Pero pensé que esto es obvio. – SasQ

+0

Sí, eso está claro para nosotros dos. Tu respuesta todavía parece un poco demasiado optimista. ¿Por qué no solo nombras la reducción de los aspectos más molestos de la gestión de la memoria (fugas de recursos, indicadores maliciosos)? La ** asignación en sí misma puede fallar **, y esto, por supuesto, debe verificarse. – Wolf

Cuestiones relacionadas