【问题标题】:Fizzbuzz in C accessing diskC 中的 Fizzbuzz 访问磁盘
【发布时间】:2021-08-09 04:58:59
【问题描述】:

我用 C 编写了一个简单的 fizzbuzz 程序,只是为了练习 C 语言的某些方面。我还在学习它,我来自更高级的语言。

在运行程序本身时,我注意到我的 PC 上的 HDD LED 闪烁。 我在代码中做错了什么,还是写交换,或两者兼而有之?

(运行在 Pop!_OS 20.04 上,使用 gcc 9.3.0 编译,高达 3000 万)

提前致谢!

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void fizzbuzz(int max){
    for(int i = 0; i <= max; ++i){
        if(i%3==0)
            printf("Fizz\n");
            
        if(i%5==0)
            printf("Buzz\n");
            
        if(i%15==0)
            printf("FizzBuzz\n");
            
        else
            printf("%d\n", i);
    }
}

int main( int argc, char *argv[] ){
    // argc: Count of arguments passed
    // argv: Pointer to arguments
    
    // Checking if arguments were passed, and checking the arguments themselves
    
    
    if(argc>1){
        if(strncmp(argv[1], "-max", 4) == 0){
            fizzbuzz(atoi(argv[2]));
        }
        else{
            printf("\nUsage: fizzbuzz_adv -max <limit of fizzbuzz>");
        }
    }
    else{
        printf("\nUsage: fizzbuzz_adv -max <limit of fizzbuzz>");
    }
    
    return 0;
}

【问题讨论】:

  • 操作系统是否允许报告磁盘访问?
  • 您的程序中没有任何内容会导致磁盘访问增加。它还有其他错误,但不是那样。
  • 如果您要输出很多行,并且终端模拟器中有很大的回滚缓冲区,则可能会导致分页。但它必须是巨大的,就像数百万行一样。
  • 我认为你应该在担心这个之前得到基本的算法。没有任何理由为数百万个数字运行 FizzBu​​zz。
  • 我知道没有理由运行 fizzbuzz 这么长时间,我只是想尝试一下,因为我想测量代码本身的资源使用情况。而且由于我只知道需要程序运行时间超过毫秒的方法,所以我必须让它运行更长时间。

标签: c fizzbuzz disk-io


【解决方案1】:

根据M.MBarmar 的想法,我安装了一个 I/O 跟踪实用程序 (iotop),看起来 gnome-terminal 正在写入磁盘,而不是程序本身。

【讨论】:

    猜你喜欢
    • 2010-11-26
    • 2015-01-19
    • 2010-10-20
    • 2011-05-23
    • 2017-05-11
    • 2011-01-09
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    相关资源
    最近更新 更多