c - 如果哈希表是用二维数组实现的,但数组的第二维永远不会被访问,那么效率会损失多少?

标签 c hash

我需要制作一个哈希表,最终可以用来编写完整的汇编程序。

基本上我会有类似的东西: 富100,

我需要对 foo 进行哈希处理,然后存储 100(命令的地址)。我想我应该只使用二维数组。仅当记录地址(只是一个 int)或返回地址时才会访问数组的第二个维度。在第二维度中不会进行任何搜索。

如果我这样实现哈希表,会不会效率低下?如果效率很低,那么更好的实现表格的方法是什么?

编辑:我还没有编写任何代码。事实上,我什至不知道我要使用什么语言。我想用 C 语言编写它,所以这将是一个更大的挑战,但如果我感到时间压力,我可能会用 Java 编写它。

最佳答案

如果数组中的所有其他 int 都未使用,那么除了内存浪费之外,您还将无法充分利用缓存,因为缓存行未得到充分利用。

但通常在编写汇编器时我不会担心这些事情,因为它不像图形或繁重的计算那样对性能要求很高。至少,我不会过早地急于优化。

但是,请务必记住,一旦开始组装自动生成的大段代码(约 100,000 行汇编代码)(例如,由编译器从 C/C++ 代码生成),性能将变得越来越高由于用户体验(等待时间)下降,这一点很重要。那时,将有许多候选优化:I/O、解析、符号查找、生成尽可能短的跳转指令(如果它们可以具有用于更短和更长跳转的多种编码)。表达式和宏也会有所贡献。您甚至可以首先考虑最小化输入汇编代码中的空格和注释。

关于c - 如果哈希表是用二维数组实现的,但数组的第二维永远不会被访问,那么效率会损失多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14451369/

相关文章:

无法链接到 WinPcap 库 wpcap.lib ("undefined reference to")

c - Tee 命令将输出保存在 txt 文件中

.net - 对哈希表进行排序的原因

hash - 为 UTF16 中的文件路径寻找一个好的 64 位哈希

hash - 使用 UUID 拆分在目录中均匀分布文件

c - if-else if-else 语句问题

c++ - 如何使用 CZMQ-4.0.2 新的 zsock API 创建发布/订阅架构?

mysql - 在 C 中追加或创建文件时如何请求连续 block (非碎片)?

javascript - 哈希和数字

php - 创建随机哈希/字符串的最佳方法是什么?