使用非可移植代码的理由

时间:2009-06-23 23:15:22

标签: portability

如果有人根据优化的代码,实现的清晰度,效率和可移植性来证明他们的设计权衡,他们如何选择?

用于此问题的相关示例可能是大文件处理,其中“大文件”对于使用随机访问方法简化的问题而言“相当多GB”。

阅读和修改此文件的方法可能是:

  1. 无论如何都要使用溪流,并寻找所需的地方 - 这是便携的,但可能很慢,而且不清楚 - 这几乎适用于所有操作系统。
  2. 将文件的相关部分映射为大块。例如,为每个块mmap一个50MB的文件块进行处理 - 这适用于许多操作系统,具体取决于为该系统实现mmap的细微之处。
  3. 只需映射整个文件 - 这需要一个64位操作系统,并且是实现此目的最有效和最明确的方法,但不适用于32位操作系统。

5 个答案:

答案 0 :(得分:4)

不确定您在问什么,但设计过程的一部分是分析可移植性和性能要求(以及其他因素)。

如果您知道自己永远不需要移植代码,并且您需要绝对最佳性能,那么您可以相应地调整实施。没有必要为了自己的利益而携带。

另请注意,如果您同时需要性能和可移植性,那么就没有什么能阻止您为每个平台提供实现。当然,这会增加您的成本,因此,您可以优先考虑您的需求。

答案 1 :(得分:2)

没有限制,理性地无法合理地回答这个问题。

你问的是“什么是最好的颜色”而不告诉我们你是在画房子,汽车还是照片。

约束至少包括

  • 选择语言
  • 目标平台(多CPU工业级服务器或iPhone?)
  • 优化速度内存
  • 成本(谁为此提供资金并且是否存在交付限制?)

任何软件都不具备“终极”可移植性。

使用各种方法处理这类问题的一个例子,但是对所需的特定输入/输出和“最佳”的测量都有严格的约束,那就是WideFinder项目。

答案 2 :(得分:2)

基本上,您需要在编码之前先考虑一下。每个项目都是独一无二的,对需求的分析可以帮助确定什么是原始的。什么能为任何项目提供最佳解决方案取决于一些事情......

首先,这个项目需要或最终是多平台吗?根据您的选择,选择正确的编程语言应该更容易。然后,您还可以在项目中使用多种语言,这是完全正常的。可移植性并不一定意味着性能降低。它意味着它需要更难的工作来实现你的目标,因为你需要高质量的代码。此外,每种编程语言都有自己的理念。了解它们是什么。有一件事是肯定的,某些问题经常反复出现。这就是为什么知道不同的设计模式有时会产生影响,但有些语言有自己的习语,在选择语言时可能非常相关。需要考虑的另一件事是您可以为项目采用不同的方法。多线程,套接字,客户端/服务器系统和许多其他技术都可供您使用。选择合适的技术有助于改善项目。

了解当前可用的需求和不同的解决方案将有助于决定何时选择不同的权衡。

答案 3 :(得分:1)

这实际上取决于项目的驱动因素。如果您正在做内部企业开发人员,那么做最简单的事情就可以对您的目标做好准备。根据需要调整性能要求。

如果您知道在第1天需要支持不同的硬件平台,那么您显然需要选择便携式实现,或者使用多种方法。

答案 4 :(得分:0)

便携性的可移植性从一开始就是Java的营销宣传,并且按照惯例是C的生活事实,我相信大多数遵守它的人“用Java或C长大”会说。

但事实上,绝对可移植性只适用于大多数具有中等复杂性的应用程序 - 任何高复杂度的应用都需要专门的调整。