gpt4 book ai didi

c - 理想的跨平台库

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:19 24 4
gpt4 key购买 nike

必须创建一个新的软件库。该库没有系统 I/O 例程,仅包含 Init(config)、Run(some_data_inputs) 和 DeInit(config) 函数以及一些类型定义和定义。 Run() 函数只是处理给定的输入数据并生成输出数据,没有中断、线程、锁等。但是,它需要一些 RAM 来满足其内部需求。接口(interface)在头文件中描述,静态库包含实现。

这个库必须尽可能多平台化。将这个库移植到任何新平台到任何新操作系统+CPU 上一定是几分钟的事。有时甚至可以在没有操作系统的平台上使用这个库。

因此,在开始开发之前,必须决定:

  1. 这个库是否必须用 ANSI-C 或什至是 ANSI-C 的子集编写,因为某些平台可能不完全支持 ANSI-C?
  2. 是否写抽象层,它封装了一个底层操作系统+CPU?
  3. 这个抽象层应该包括它自己的内存管理器(malloc/free 例程)或全部今天的平台已经提供了吗?

最佳答案

  1. Must this lib be written in ANSI-C or even in a sub-set of ANSI-C because some platforms may not support ANSI-C completely?

两者都不是,我建议使用 ISO C。自 1990 年以来,ANSI 一直不是 C 的标准机构。ISO C90 应该是无处不在的。根据目标平台的功能,附带的标准库可能是一个子集,或者可能需要实现 stub 以将其移植到特定目标。 Newlib C 库通常用于使用 GCC 的嵌入式系统,例如,需要基本的 I/O stub (在这种情况下不需要,因为您已指定不发生 I/O 操作)和要实现的 sbrk() 函数。 sbrk() 为堆分配器提供内存;它不需要操作系统,或者它可以从操作系统请求内存。

  1. Whether to write an abstraction layer, which encapsulates an underlying OS+CPU?

给出你对这个库设计的限制,似乎没有操作系统问题。标准库提供了内存分配的要求。

  1. Should this abstraction layer include its own memory manager (malloc/free routines) or all platforms today provide it already?

在 (1) 中回答;将它们作为标准库的一部分提供或使用平台的现有实现。

最后,您需要的是编写您的库以使用 C90 和标准库,然后只需将标准库移植到目标(如果尚未完成)即可。

关于c - 理想的跨平台库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4316060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com