繁体   English   中英

从C ++(使用大量STL)切换到C用于解释器构建

[英]Switching from C++ (with a lot of STL use) to C for interpreter building

我正在从C ++切换到C,因为我正在重建我的玩具翻译。 我习惯了动态分配对象的向量 ,如令牌或程序指令, 堆栈以及主要包含所有方面的字符串

现在,在C中,我不会再拥有所有这些了。 我知道我也必须使用大量的内存管理。

  • 我是C的新手,我只知道STL的高级简易数据结构,如何开始使用字符串和动态内存分配?

在C中,景观要简单得多。 你只有malloccallocreallocfree

malloc分配一些字节并将其返回给您,失败时返回NULL。

calloc与malloc是一样的,但是为你执行大小乘法。 (你给它sizeof(mytype)和数字,它给你正确的大小)。 它还用零填充内存块。

realloc采用先前malloc的指针,并更改底层内存块的大小。 如果可以扩展块,则它是,如果不能,则分配新块,并将旧块的内容复制到新块。 失败时返回NULL。

free赋予以前使用malloccallocrealloc分配的malloc

正如您可能已经猜到的那样,如果您习惯使用C ++并希望更改为C,则会涉及更多工作。

对于向量,通常的方法是在需要动态类似数组的结构时使用链表 虽然这与向量 - O(1)访问与常规链表中的O(n)不同 - 它通常“完成工作”。 或者:不要使用动态数组。 使用固定数组和MAX_ARRAY样式常量可以获得许多情况。 对于v0.2至少:-)

对于字符串,您最终可能会得到以下内容:

struct string {
    char *buf;
    size_t length;
}

使用更多字段来计算分配的缓冲区与使用的实际缓冲区,依此类推。 然后一大堆例程附加到字符串,释放它,复制另一个字符串,依此类推。

堆栈可以根据链表或数组实现。

你有没有发现这种模式? 计算机科学101.充足的轮子改造。 优点是您可以优化程序的数据结构 缺点是你可能需要编写一大堆代码才能回到现在的位置。 而且你将需要更多的单元测试。

字符串只是字符串数组,以0结尾(也是'\\ 0')(相当硬的核心),但你可以使用自己的函数制作任何你想要的东西,也许你自己的结构 - 你可以制作自己的字符串。

本机可用的ansi字符串函数: http//cplusplus.com/reference/clibrary/cstring/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM