什么是“atom”数据类型?

问题描述 投票:0回答:5

我在

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

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

编辑

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

c++ winapi types
5个回答
20
投票

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

typedef 无符号短 ATOM;


11
投票

至于

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

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


3
投票

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

Mehrdad

指出的那样,希腊语的原始含义是“不可分割的”,因此它们意味着无法进一步分解的原始数据类型。


2
投票
RegisterClass

/ RegistrClassEx 函数(以及其他一些函数)返回 ATOM 数据类型。 ATOM 唯一标识正在注册的类,但如果函数失败,它将返回零,因此您可以像这样测试函数是否失败


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



0
投票

Atom 是一个指针,指向一个唯一的、不可变的零个或多个序列 任意字节。大多数原子是指向空终止字符串的指针, 但指向任何字节序列的指针都可以是原子。只有一个 任何原子只出现一次,这就是它被称为原子的原因。二 如果原子指向同一位置,则它们是相同的。比较两个 通过简单地比较指针来确定字节序列是否相等是其中之一 原子的优点。另一个优点是使用原子可以节省空间 因为每个序列只出现一次。原子常常 用作按序列索引的数据结构中的键 任意字节而不是整数。所描述的表和集合 第 8 章和第 9 章是示例。

© www.soinside.com 2019 - 2024. All rights reserved.