代码长度或磁带大小:brainf..(加上参数)
Code length or tape size: brainf... (munged)
是最好有一个较长的磁带大小比程序大小与脑操?还是反过来更好?
还有,相对于彼此有多大?
我正试图为Arduino做一个脑操解释器。我知道以前有人这样做过,但我增加了Adafruit显示和代码编写能力等功能。
因此,代码相当长,特别是因为我将代码和磁带都存储在数组中:
char code[] = {};
byte tape[] = {};
内存应该由至少30000个单元组成,一些现有的脑操程序确实需要更多,所以这应该是可配置的或无限制的。
我知道我永远不会把30000个单元格塞进一个Uno,但动态内存似乎是最大限度地利用它的方法。无论如何,我都很感激。
目前,char code[512] = {};
和byte tape[1024] = {};
使用了"1807字节(88%)的动态内存",但这只是解释器草图。我还需要压缩更多的代码。有兴趣的人可以在这里查看代码
您可以使用map
对象来实现它,而不是创建一个有限的数组。将索引用作键,并将该单元格中的值用作值(如果该值等于0则将其删除,如果该单元格的值现在增加到1或更多,或减少到小于0,则在映射中创建一个新条目。
这样你只存储非0的值(节省内存和分配考虑),并且你有一个理论上无限的磁带(更纯粹的实现)。
operation map
----------------------------
#code_start <>
+ <0 : 1>
+ <0 : 2>
- <0 : 1>
- <>
- <0 : -1>
>+ <0 : -1, 1 : 1>
<<- <-1 : -1, 0 : -1, 1 : 1>
映射可以通过包含#include <map>
来使用,并由std::map<int, int> map_name
或您想使用的任何类型创建。
查看这里的文档:http://www.cplusplus.com/reference/map/map/
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 代码长度或磁带大小:brainf..(加上参数)