javascript - 将无类型数组编译为 C 的有效方法是什么?

标签 javascript c++ c optimization compiler-construction

我正在将代码从一种允许无类型的动态数组(例如 JavaScript)的语言编译为 C。在其上表示这些数组的最佳方式是什么?示例:

var array = [1,2,"test",[1,2]];
array.push([5]);

注意缺少适当的形状和大小。

由于缺乏适当的形状,我曾考虑将所有内容装箱在一个结构中,其中包含指向实际对象的指针。所以我可以有一个那个盒子的数组。 GCC 是否能够拆箱,这样我就没有性能损失,或者我应该寻找替代解决方案?

由于缺少静态大小,我不确定最好的方法是什么。

最佳答案

这通常是 union 的目的;至少,它们是最节省内存和时间的解决方案。使数组的每个条目成为一个具有两个成员的结构:一个标记数据类型的整数,以及一个包含您可能存储的所有可能类型的 union 。

例子:

struct typed_elem {
    int type;
    union {
        int32_t i;
        double f;
        char *s;
        struct typed_elem *a;
    } value;
};

这将允许您的数组包含整数、 float ( double )、字符串或类似本身的其他数组。 type 成员将保存一个代码(您可能更喜欢使用 enum 而不是 int)来告诉您的程序是哪个成员 union 活跃。

关于javascript - 将无类型数组编译为 C 的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20013949/

相关文章:

javascript - 在图像更改时更改轮播的 bg 颜色

javascript - 使用破坏的 typescript 无状态(功能)组件警告?

javascript - 在 Backbone 集合中更改后,模板不会重新呈现

c++ - 具有怪异行为的井字游戏Minimax算法(C++)

c - K&R 1-10,终端吃掉退格键

c++ - 如何将 CURLOPT_DNS_CACHE_TIMEOUT 与共享 DNS 缓存一起使用

javascript - 如何从 NodeJS 中的文本文件中提取(读取 + 删除)?

c++ - 在函数中使用 QVector 的子集

c++ - 自定义 avi/MP4 文件编写器

c - C 语言的交互式随机程序