Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java vs C(运行时)编辑:添加代码_Java_C_Intellij Idea_Codeblocks - Fatal编程技术网

Java vs C(运行时)编辑:添加代码

Java vs C(运行时)编辑:添加代码,java,c,intellij-idea,codeblocks,Java,C,Intellij Idea,Codeblocks,我刚刚写了一个程序,可以找到所有上界的素数 算法:埃拉托斯烯筛 用C和Java写的。上限是666014 出于某种原因,C在2.5秒内给出结果,而Java在半秒内完成 详情: C中的数组是char类型的 Java中的数组是布尔类型 代码块 JavaIDE:IntellijIdea社区版 C代码: #include <stdio.h> int main() { int n = 666013; int i; int k; char a[n];

我刚刚写了一个程序,可以找到所有上界的素数

算法:埃拉托斯烯筛

用C和Java写的。上限是666014

出于某种原因,C在2.5秒内给出结果,而Java在半秒内完成

详情:

C中的数组是char类型的

Java中的数组是布尔类型

代码块

JavaIDE:IntellijIdea社区版

C代码:

#include <stdio.h>

int main() {

    int n = 666013;
    int i;
    int k;

    char a[n];

    for (i = 2; i <= n; i++)
        a[i] = 0;

    for (i = 2; i <= n; i++)
         if ( a[i] == 0 )
         {
            printf("%d\n", i);
            for (k = i + i; k <= n; k += i)
                 a[k] = 1;
         }

    return 0;

}
Java代码:

package primes;

public class Prime {

    public static void main(String[] args) {
        long starttime = System.nanoTime();
        final int MAXN = 666013;
        boolean a[] = new boolean[MAXN];

        for (int i = 2; i < a.length; i++)
            a[i] = true;

        for (int i = 2; i < a.length; i++)
            if (a[i])
            {
                System.out.println(i);
                System.out.printf("");
                for (int j = i + i; j < a.length; j += i) {
                    a[j] = false;
                }
            }

        System.out.println(System.nanoTime() - starttime);

    }
}
上次编辑:已使用System.nanoTime Java给出0.35秒


C算法不能再快了。Java在这里更快的原因是什么

我敢打赌,即使您在问题标题中列出了编译时间,您实际上还是在询问运行时。如果您试图对编译进行计时,那就真的很简单了,特别是如果您是在IDE中而不是使用命令行进行编译的话

如果你将java应用程序和C++应用程序进行比较,你必须考虑很多事情。 您应该使用相同的数据类型。 您必须确保Java代码没有触发额外的装箱。 您应该阅读这两种语言,并了解如何使用最准确的低级系统计时器。例如,System.currentTimeMillis在Java中不是很精确。 在将时间输入到输出之前,您应该确保测量了时间,以便在测试中不会测量两种语言的输出差异。 您是否在两种语言中运行相同的体系结构?32或64位。


坦率地说,您的评估非常依赖于代码。如果不显示代码,人们就帮不了你。即使是最简单的代码,您也可以做很多很多事情来影响计时。

您有问题吗?示例代码在哪里?根据您的标题,您在什么意义上谈论编译时间?如果您共享一些Java版本和C版本的代码示例,将非常有用。只提到你使用的数组不是很有用,因为你甚至没有指定数组使用什么。出于某种原因,C给出了超过2.5秒的结果,所以你告诉我们,你的C编码技能不符合标准吗?System.currentTimeMillis比nanotime更精确为什么这是出于好奇?我想我记得Joshua Bloch的《有效Java》中说currentTimeMillis不准确,但我现在没有这本书要检查。我可能记错了文字。这个链接可能有用:那本书在另一个标签中打开。干杯:啊,不错的链接:对答案的28票评论帮助很大。这是一本很棒的书,我买了它,因为它是用有效的C++建模的,它也很棒。D