首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是建议的方法,使等效的"const数组“在药剂?

什么是建议的方法,使等效的"const数组“在药剂?
EN

Stack Overflow用户
提问于 2016-02-17 14:41:34
回答 1查看 549关注 0票数 6

在Elixir语言中,使用随机访问的"const数组“的标准方法是什么?(例如,用于CRC计算的,或AES s-boxes)

从Erlang的背景来看,我认为“数组”本身应该是一个元组,因为通过elem/2 / element/2的访问似乎是O(1) (erts/emulator/beam/bif.c中的函数BIF_RETTYPE element_2(BIF_ALIST_2) )。

但是存储范围呢,因为Erlang/Elixir没有全局?我的鼻子上说@module_attribute是个好地方,但我不太清楚@属性是在什么时候在哪里展开的。

有一个已知的Erlang问题:当您在模块中使用-define(LARGE_LIST,[...]),然后在函数中使用?LARGE_LIST。该值在每个函数调用时被重新构造。解决方案是在应用程序启动时构造一次,并将其作为参数之一传递给需要它的函数。

灵丹妙药的@module_attribute是解决了这个问题,还是被看作是花哨的宏扩展?我读过模块属性上的官方文档,但我仍然很困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-17 15:03:56

从文档中可以看出,Elixir模块属性的工作方式类似于Erlang模块属性,即它们是可以由Module:module_info(Attributes)检索的模块元数据。这最终进入了beam_load.c中的函数beam_load.c,据我所见,每次访问数据时,它都会复制数据。因此,模块属性不适用于大量频繁访问的数据。

相反,我会编写一个函数,它不带参数,只返回元组。元组将被编译到模块的常量池中,因此它不会在每次调用该函数时重新构造;该函数实质上返回对常量数据的引用。这在Erlang效率指南中的“常量池”部分中进行了描述。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35459753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档