什么是"原子"数据类型?

Jes*_*ood 22 c++ winapi types

ATOMWin32api中遇到过类型,在Acrobat API中也遇到过ASAtom.

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

编辑

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

Sec*_*att 11

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

typedef unsigned short ATOM;

  • 不.它们是内核模式下句柄表的索引.它们故意不透明,因为泄漏内核模式指针到用户模式是一种安全违规. (6认同)
  • @SecurityMatt:不应取消引用内核模式指针触发 STATUS_ACCESS_VIOLATION。 (2认同)

Sas*_*asQ 6

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

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

  • 当然,但正如我所说,这些是与原始问题无关的不重要的细节。为什么要费心去陈述显而易见的事情呢?如果原始海报没有询问他们,我认为他很聪明并且知道这些细节。他只问什么是ATOM。但是,如果您不这么认为,为什么不添加自己的答案呢? (2认同)
  • 词源几乎可以肯定是后排。它来自 Lisp。在 Lisp 中,符号是“原子”。当 Lisp 阅读器读取一个符号标记时,它会变成一个字符串,并立即“插入”:转换为一个符号。符号可以作为指针进行比较:如果符号 A 等于 B,我们就知道它们是同一个原子;我们不必对它们的字符串名称进行逐个字符的比较。在 X Windows 系统中,使用 Lisp 的“实习生”术语将字符串转换为 `XAtom` 称为 `XInternAtom`。Windows 可能从那里“原子”了它。 (2认同)