请帮助我验证我是否遵循正确的编码技术/实践,具体到"共享库"
我必须创建并交付具有以下要求的'C'"共享库"
- 使用自己的协议,通过以太网从外部设备收集和存储数据
- 处理此数据
- 为用户应用程序提供一个API,该API接受指针来复制处理过的数据。
用户应用程序将事先知道数据的大小,因此它可以提前分配那么多内存并将指针传递给API。API将数据复制到指针。此数据最多可达1gb。
因为我以前没有写过任何共享库,我的第一个问题是关于在共享库中分配1GB内存(使用malloc),这是正确的做法吗?
第二个问题:在共享库中,声明这个内存(1GB)指针为全局指针是正确的做法吗,因为我在库中有多个函数访问相同的内存用于处理目的?(我正在照顾竞争条件与互斥)
Thanks in advance
在拥有几gb内存的现代系统中,使用malloc分配1G内存应该不是问题。即使您用光了物理内存,在您开始使用该内存之前,这仍然不会成为性能问题。Malloc只是保留虚拟内存空间,但实际的内存分配发生在第一次访问时。malloc的另一个优点是它不初始化内存。这也会节省你的时间。
关于全局变量。这完全取决于编码风格。我不建议使用全局变量,因为它们通常是错误、竞争条件和隐藏陷阱的根源。
作为一般实践,您最好直接使用操作系统服务分配大块内存并自己管理它们,而不是依赖于malloc()在幕后所做的任何事情。
首先是几个原因:
1) Malloc增加内存开销
2)一些malloc实现不能很好地处理大块。
3)像这样的大分配更有可能失败。使用系统服务通常会提供更多的诊断信息。
关于你的第二个问题,一般来说这不是一个好主意,但在某些情况下可能是。你似乎在暗示,除了是共享库之外,这是跨进程共享的内存。在这种情况下,您需要使用系统服务来创建内存块。