28

我在Win32api中遇到过这种ATOM类型,在 Acrobat API 中也有ASAtom

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

编辑

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

4

4 回答 4

16

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

typedef 无符号短 ATOM;

于 2012-05-10T08:32:07.107 回答
6

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

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

于 2014-03-24T16:31:44.160 回答
3

关于“原子”一词,我能找到的最早的东西来自 Lisp 编程语言(源代码)。但是,它可能最初来自数理逻辑。在编程中,它们也被称为符号,最简单的形式是名称整数(C 中的枚举类型就是一个例子)。但是,它们广泛用于许多编程语言,在 Win32 API 和 Acrobat API 中,它们是表中字符串的标识符。

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

于 2012-05-10T02:38:05.427 回答
2

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

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

ATOM a=0;
.
.
a = RegisterClassEx(your_window);
if (0==a)
  {
    //code for function failed
  }
于 2013-12-10T14:16:39.720 回答