2015/11/1,2019/4/25,2022/6/7
008a.scmとして保存 | 008b.scmとして保存 |
関数fibは再帰関数であるが線形再帰関数ではない。#lang racket (define (fib n) (cond ((equal? n 0) 1) ((equal? n 1) 1) (else 各自検討) )) |
関数fib2は線形再帰関数であり末端再帰関数である。#lang racket (define (fib2 l m n) (cond ((equal? n 0) l) ((equal? n 1) m) (else 各自検討) )) (define (fib n) (fib2 1 1 n)) |
インタプリタによる処理 | コンパイラによる処理 |
インタプリタでの処理時間はtime関数(Scheme組込関数)を使用する。 実行時間はcpu timeとreal timeを記録する。 計測後、Drracketはすべて終了する。 ![]() | 008b.scmをコンパイルした後、実行する。コンパイル及び実行手順を示す。 インタプリタの処理時間計測で使用したtime関数(組み込み関数)の結果は無視する。 #端末を開く cd ~/scheme mzc --exe 008b.bin 008b.scm time ./008b.bin実行時間はrealとuserを記録する。 ![]() |
![]() |
![]() |
![]() |
![]() |
#Linuxでメモリリークをチェックする方法 gcc -g -fsanitize=address -O3 008c.c&&./a.out処理に要した時間はtimeコマンドで確認できる。
gcc -O3 -o 008c 008c.c time ./008cコンパイラの使い方がわからない場合はgcc自身に聞くか(--hオプション)、manコマンドで詳しい説明を見ることができる。
gcc --h man gcc
プログラム | 実行時間 | memo |
---|---|---|
非末端再帰関数 008a.scm | cpu time: 6129 real time: 6134 gc time: 10 時間の単位はミリ秒 | |
末端再帰関数 008b.scm | cpu time: 0 real time: 0 gc time: 0 時間の単位はミリ秒 | 008b.scmは処理時間が短すぎて008a.scmと比較できない。 |
プログラム | 実行時間 | memo |
---|---|---|
インタプリタによる処理 | cpu time: 3308 real time: 3313 gc time: 1439 時間の単位はミリ秒 | インタプリタによる処理を基準とする |
ロードモジュール (コンパイルしたもの) | real 0m2.690s user 0m2.108s sys 0m0.572s | (user)/(cpu time)=0.6372 (real)/(real time)=0.8120 |
C言語実行環境記述例1 「C言語実行環境記はScheme言語実行環境と同じ」と記載する。 | C言語実行環境記述例2 C言語実行環境記はScheme言語実行環境と異なる場合は、各自で調査する |
OS:Linux Pr 5.10.0-14-amd64 #1 SMP Debian 5.10.113-1 (2022-04-29) x86_64 GNU/Linux C言語コンパイラ:gcc version 10.2.1 20210110 (Debian 10.2.1-6) |
OS:Microsoft Windows 10 version 21Hxxx(OSビルド xxxxx.xxxx) 統合開発環境:Visual Studio 20xx Academic version xx.xx.x C++コンパイラ:Microsoft Visual C++ 20xx |
プログラム | 実行時間 | memo |
---|---|---|
Scheme言語 インタプリタによる処理 | cpu time: 3308 real time: 3313 gc time: 1439 時間の単位はミリ秒 | インタプリタによる処理を基準とする |
C言語 ロードモジュール (コンパイルしたもの) | real xmx.xxxs user time: xmx.xxxs sys xmx.xxxs | (user)/(cpu time)=x.xxx (real)/(real time)=x.xxx |