将非类型化数组编译为 C 的有效方法是什么?
What is an efficient way to compile untyped arrays to C?
我正在从一种允许非类型化动态数组(如JavaScript)到C的语言编译代码。在其上表示这些数组的最佳方法是什么?例:
var array = [1,2,"test",[1,2]];
array.push([5]);
请注意缺乏适当的形状和大小。
由于缺乏适当的形状,我认为将所有内容装箱在一个结构中,这将包含一个指向实际对象的指针。所以我可以有一个那个盒子的数组。GCC 是否能够将其拆箱,这样我就不会受到性能损失,或者我应该寻找替代解决方案?
由于缺乏静态大小,我不确定最好的方法是什么。
这通常是联合的用途; 至少,它们是最节省内存和时间的解决方案。使数组的每个条目都成为具有两个成员的结构:一个标记数据类型的整数,以及一个包含可能存储的所有可能类型的联合。
例:
struct typed_elem {
int type;
union {
int32_t i;
double f;
char *s;
struct typed_elem *a;
} value;
};
这将允许数组包含整数、浮点数(双精度)、字符串或其他类似自身的数组。type
成员将持有您编造的代码(您可能更喜欢使用enum
而不是int
)来告诉您的程序哪个工会成员处于活动状态。
您应该在 Javascript 中使用 ArrayBuffer (TypedArrays/ByteArrays) 来创建静态结构或通过 JSON 在两种语言之间传输数据。为了在 C 中使用动态结构,您需要为每个元素提供某种形式的标头,这将为您提供有关如何解析接下来的几个位的线索。
我的建议是使用类型化数组。这样,您就可以在C和Javascript中拥有相同的结构。
相关文章:
- 在jQuery中创建向下滑动子菜单的最有效方法
- 使用Underscore.js修改json数组中所选元素的更有效方法
- 选择具有值数组的所有元素的最有效方法
- 将JSON存储和恢复到此Ionic应用程序的最有效方法
- 将javascript数组中的项移动到特定位置的有效方法
- 将JS对象数组转换为嵌套形式的最有效方法
- 隐藏具有特定类$.each、for等的元素的有效方法
- 什么's是调用具有可变参数的函数的有效方法
- 选择具有特定数据的所有 html 标记的最有效方法是什么 - [适当性],无论值如何
- 使用 jQuery 调用 PHP 端点的最有效方法
- 这是解析 Int 的有效方法吗?
- 在JavaScript中搜索数组映射的最有效方法
- 获取字符串中最后一个换行符的最有效方法是什么
- 什么's是在两个(或多个)阵列中找到匹配的细胞序列的最有效方法
- 什么's是在IE8+中添加元素的最有效方法
- 从任何jquery选择器字符串创建元素的最有效方法
- 在日期范围内查找丢失日期的最有效方法是什么
- 对区间[1,10^12]中的整数进行编码/解码的快速有效方法是什么
- 在条件(if)结构的条件语句中是否有定义变量的有效方法
- 在ASP.NET中使用JQuery UI自动完成的有效方法