Подтвердить что ты не робот

Что такое тип данных "атом"?

Я столкнулся с типом ATOM в Win32api, а также в API Acrobat есть ASAtom.

Насколько я могу судить, атомы - это ключи для хеш-таблицы, как правило, строк, чтобы обеспечить быстрый поиск и обмен данными между приложениями. Правильно ли это и что такое этимология типа атома?

ИЗМЕНИТЬ

После некоторого обширного поиска я заметил, что Prolog использует атомы, поэтому должно быть какое-то происхождение этого слова. Кажется, что он используется для обозначения любого отдельного фрагмента данных.

4b9b3361

Ответ 1

ATOM - это 16-разрядный примитив, похожий на дескриптор Windows. Это значение полностью непрозрачно для пользовательского режима. Это не указатель или индекс.

typedef unsigned short ATOM;

Ответ 2

Что касается этимологии имени ATOM, я знаю, что когда-то видел в старой документации Microsoft Win32 API, что это аббревиатура " A ccess to M emory" или что-то в этом роде. Это термин, используемый для простых числовых идентификаторов (другое имя - "дескрипторы" ), которые представляют собой некоторые внутренние структуры данных в системе.

По очевидным причинам было бы неразумно давать пользователям прямые указатели на эти структуры. Во-первых, потому что они находятся в пространстве ядра, а во-вторых, потому что это нарушает инкапсуляцию. Затем пользователь может просто освободить память, которая не принадлежит ей, или перезаписать ее, или некоторые другие глупые идеи. Таким образом, операционная система просто дает ему некоторый тег замещения (ATOM), который затем может использоваться для запроса данных из системы. Это также быстрее для пользователя, чтобы обойти небольшое число, а не всю огромную структуру данных. Пользователям не нужно заботиться о распределении памяти и т.д. Или получить доступ к некоторым данным через указатели, которые больше не действительны, что может просто привести к сбою их программ.

Ответ 3

Самое раннее, что я могу найти о терминах "атом", - это язык программирования Lisp (источник). Однако он, вероятно, первоначально появился из математической логики. В программировании они также называются "Символы" , а в его простейшей форме - целые числа имен (например, перечисляемый тип на C). Тем не менее, они широко используются во многих языках программирования, а в API Win32 и API Acrobat они являются идентификаторами для строк в таблице.

Кроме того, как указывает Mehrdad, исходное значение на греческом языке является "неделимым", поэтому они подразумевают примитивный тип данных, который не может быть разбит дальше.

Ответ 4

Функции RegisterClass/ RegistrClassEx (и несколько других) возвращают тип данных ATOM.

ATOM однозначно идентифицирует зарегистрированный класс, но если функция не работает, она возвращает ноль, поэтому вы можете проверить, не сработала ли функция

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