我正在研究一个带有微控制器的电子项目,该微控制器用C编程.
我需要将一些ID及其相关信息存储在闪存(SD)中.这些ID长度为16个字节,因此有2 ^ 128个可能的值.虽然它们是16个字节,但只使用50000(唯一)值.在物理上不可能将所有可能的(2 ^ 128)ID存储在SD中.
我只能存储50000个已使用的值但是我必须遍历所有(最坏的)它们才能找到我需要的值.此外,必须为它们中的每一个计算16字节值的比较,这使得它非常慢.
所以我想我需要某种(hash?)函数将2 ^ 128值映射到50000(映射16字节到2字节).很明显,一些原始值将映射到相同的值/索引.我的想法是,当我得到一个ID时,我应用一个哈希函数,它给出了一个介于0和~50000之间(0-65535)的索引.使用该索引,我可以直接访问存储ID及其相关信息的SD扇区.正如我已经指出的那样,该索引将引用内存的位置,其中各种ID将共存,因为一些不同的ID被映射到相同的索引值.我必须找到正确的ID,但它只需要几个比较而不是50000个原始ID.
任何想法/意见都会非常感激.
提前致谢.
我正在为Mac OSX平台开发一个非常简单的应用程序,利用Qt和OpenGL(和QtOpenGL),因此跨平台变得更容易.
应用程序接收可变数量的视频流,这些视频流必须呈现给屏幕.这些视频流的每个帧用作用于在3D空间中映射矩形的纹理(非常类似于视频墙).除了接收,锁定,上传视频数据,同步线程之类的东西......我认为很明显它是一个非常简单的应用程序.
事实是,当在10.5 Mac中使用基于可可的Qt 4.7二进制文件(默认值)时,一切都表现良好.但是我的代码必须在从(并包括)10.4开始的所有OSX版本中运行良好.所以我在10.4机器上尝试了代码,它在启动时崩溃了.经过几个小时的互联网阅读后,我发现,对于目标为10.4的Qt应用程序,必须使用碳Qt.所以我用新框架重建整个项目.
当新生成的二进制文件运行时,一切正常,除非应用程序的fps下降到大约2 fps!并且它在两台机器上的行为相同(10.5计算机具有明显更好的功能)我花了很多时间研究这个但我还没有达成解决方案.有什么建议?
有关应用程序和我尝试过的事情的更多信息
我怀疑的一些事情(结论)
好吧,这是(抱歉这么久的写作)我的实际头痛.任何建议,想法..将非常感激.
Thx提前.