gpt4 book ai didi

c - 避免在函数调用之间传递大数据

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

我对 C 完全陌生,所以请多多包涵。我正在编写一个解析器来打开多个文本文件——每个大约 300 Kb,逐个字符地读取它们并提取所需的信息。处理分为三个不同的阶段,它需要大约十个不同的函数来处理每个字符串 block ,一个接一个。

由于文件不是很小而且可能有很多,我正在尝试编写一个高效且符合行业标准的代码。

在我看来,这些是我的选择:

A) 嵌套函数调用:假设我的 main 函数调用 read_file,然后 read_file 调用 get_lines,然后 get_lines 调用 get_name 等等。

这个解决方案的优点是,如果我在我的 read_file 函数中有一个 while 循环,那么我可以直接在循环内调用 get_name功能;但是,如果我将数据从 get_lines 函数返回到 main,那么我必须再次循环并将数据传递给 get_name

这里的问题是它不是一种很有条理的做事方式。在这种情况下,我的主函数只会调用 read_file 函数,然后最后将输出数据写入文件。

我猜 main 函数应该控制程序的整体执行,这意味着它应该调用一个函数来执行一些业务逻辑,然后检索数据并将其传递给下一个函数,很快。我是对的还是错误的假设?

B) 全局变量:这样我将定义几个全局变量,然后我将直接处理它们,而不需要将它们从这个函数传递到另一个功能。

既然不需要在函数生命周期结束时返回数据,那么效率肯定更高;但是,一般来说,我不是全局变量 的忠实拥护者,即使在静态类型和同步环境中也是如此。不过,我可能对此感到不必要的担心。

C) 传递指针:对我来说,这似乎是我应该去做的方式;然而,由于这些数据在函数范围内是本地的,所以我将使用Wild Pointersstatic 关键字解决了无效指针的问题;然而,似乎更有经验的人出于某种原因试图避免使用它。所以我不太确定这是否是一个好的做法。

问题:我在C 方面没有任何实际经验,因此我看不出上述解决方案的真正优缺点。例如,与使用全局变量相比,使用 static 关键字并传递指针是否有任何优势?

换句话说,在这个特定案例中,每种方法的优缺点的简短列表肯定会帮助我从三种方法中选择一种。

最佳答案

就问题而言,全局和局部静态变量的行为方式相同。出于特定功能的考虑,它们都算作“全局”,因此不能同时从多个调用(从多个并发线程调用)中使用 end。

要回答这个问题,需要了解此代码的要求和最终目标。

有些任务需要最终数据集作为结果——这些数据会随着文件的增加而增长,但在使用之前仍然必须完成。作为示例,您可以想到文件(或文件集)中的唯一单词列表。

其他任务允许迭代方法 - 您可以多次调用函数,每次检查返回值并处理它。一些特定的返回值表示没有更多数据,此时您应该停止调用它。示例是文件读取函数,例如 fread - 您多次调用它,并且每次它都从上次停止的地方继续读取。同样的任务可以通过形成完整的数据集来完成——比如根据需要分配尽可能多的内存并将整个文件读入其中;这是完全不同的,不太灵活的方法。然而,某些更高级别的任务(处理数据的任务)可能需要它。

有些任务允许两种方法,例如XML 解析可能是 DOM 或 SAX。但是,仍然有一个更高级别的目标决定使用哪种方法(DOM 可能更容易使用,但如果数据是从慢速源(例如互联网)获取的,则首选 SAX,同时需要至少显示部分数据尚未完全加载的数据)。

关于c - 避免在函数调用之间传递大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27766967/

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