什么是“原子”数据类型?

时间:2012-05-09 23:23:43

标签: c++ winapi types

我在Win32api中遇到了ATOM类型,并且在Acrobat API中遇到了ASAtom

据我所知,原子是通常为字符串的哈希表的键,以便在应用程序之间快速查找和共享数据。这是正确的,原子类型的词源是什么?

修改

经过一番广泛的搜索,我注意到Prolog使用原子,所以这个词必须有一些起源。它似乎用于指代任何单个数据。

4 个答案:

答案 0 :(得分:10)

ATOM是一个16位Windows手柄式原语。它的值对用户模式完全不透明。它不是指针或索引。

typedef unsigned short ATOM;

答案 1 :(得分:4)

至于名称ATOM的词源,我知道我曾经在一些旧的Microsoft Win32 API文档中看到它是“ A ccess 的首字母缩写词 M emory“或类似的东西。它是一个用于简单数字标识符(其他名称为“句柄”)的术语,它代表系统中的一些内部数据结构。

由于显而易见的原因,为用户提供指向这些结构的直接指针并不明智。首先,因为它们驻留在内核空间中,其次,因为它违反了封装。然后,用户可以释放不属于它的内存,或覆盖它,或其他一些愚蠢的想法。因此操作系统只是给它一些替换号码标签(即ATOM),然后可以用来从系统请求数据。用户传递小数字而不是整个庞大的数据结构也更快。用户无需关心内存分配&东西,或通过不再有效的指针访问一些数据,这可能只会使程序崩溃。

答案 2 :(得分:3)

我能找到的关于术语“atom”的最早的东西来自Lisp编程语言(source)。但是,它最初可能来自mathematical logic。在编程中,它们也称为Symbols,其最简单的形式是名称整数(C中的枚举类型就是一个例子)。但是,它们广泛用于许多编程语言中,在Win32 API和Acrobat API中,它们是表中字符串的标识符。

另外,正如Mehrdad指出的那样,希腊语中的原始含义是“不可分割的”,因此它们暗示了一种原始数据类型,不能再进一步细分。

答案 3 :(得分:0)

RegisterClass / RegistrClassEx 函数(以及其他一些函数)返回 ATOM 数据类型。

ATOM唯一标识正在注册的类,但如果函数失败则返回零,因此您可以测试函数是否已失败,如此

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