構造力学・強度計算実践への一歩
計算容量限界(各種言語) 2012-11-05  Mori Design Office

有限要素法など技術計算で配列を用いて容量の大きい計算を行う場合を鑑みて、種々の言語に対し容量限界検証の為、
Windowsアプリ及びConsoleアプリに対し、各々下記の如くのテストプログラムを実施、結果を記述します。
ここでの検証方法は、Windows搭載のパソコン1台単独に於いて、プログラミング言語に使用出来る配列要素数の限度とします。
(これから始める方へ:留意点を付記しています。言語ソフトは各該当サイトより無償入手出来できます。)、
 
配列サイズ限界の比較表_ ↓ 

配列の計算での要素数 N
      ループ計算:   for (i = 1; i <= N; i++){ f[i] = 0; }

この場合、計算可能なNの限界と諸状況は下記表の通り。
プログラミング
言語
コンソール・アプリケーションウインドウズ・アプリケーション 備考
計算量N時間使用メモリ作成ファイル 計算量N時間使用メモリ作成ファイル
@ Fortran 90/95
(TDM-GCC)
1.4*10912. 秒 3.2 GB アプリ exe
124KB(64bit)
      
 
AVisual Basic 2010
(Microsoft)
2.6*1081.0 秒2.0 GBアプリ exe
12KB(64bit)
2.6*1081.4 秒2.0 GBアプリ exe
21KB(64bit)
 
BVisual C# 2010
(Microsoft)
1.8*1080.8 秒1.4 GBアプリ exe
6KB(32bit)
2.6*1081.3 秒2.1 GBアプリ exe
11KB(64bit)
 
CVisual C++ 2010
(Microsoft)
4.0*1084.8 秒2.9 GBアプリ exe
7KB(32bit)
3.5*1081.3 秒2.7 GBアプリ exe
57KB(32bit)
VS 2010 pro 評価版
DJScript
(Microsoft)
1.5*108約2 秒1.2 GBアプリ exe
5KB(64bit)
2.5*1081.4 秒2.0 GBアプリ exe
8KB(64bit)
コンパイラ jsc
32bit, 64bit指定可
EJavaScript
(ブラウザ)
      1.7*1088.0 秒1.4 GB
firefox.exe
ファイル html
1.6KB
Firefox 11
(32bit)
FJava
(Eclipse EE IDE)
8.0*1070.1 秒0.7 GB
java.exe
ファイル jar
1.4KB(64bit)
8.0*1070.4 秒0.7 GB
javaw.exe
ファイル jar
2.7KB(64bit)
Javaは人気トップ
GPHP (32bit)
(PHP 5.2)
2.5*10710. 秒2.0 GBphp.exeファイルphp
0.3KB
2.5*10714. 秒1.9 GB
httpd.exe
html(1.2KB)
php(0.8KB)
サーバーApache 2.2
(32bit)
HPerl (64bit)
(Active Perl 5.14)
1.2*10855. 秒3.0 GB
perl.exe
ファイル pl
0.6KB
     サーバーApache 2.2
(32bit)
 なお、使用パソコン OS:Windows7(64bit)、 搭載メモリ:4GB(正味3.75GB)、 プロセッサのサブスコア:7.2
 使用メモリ(使用量):タスクマネージャのプロセスタグのメモリ値、時間は平均値
 上記表のインデックス@〜Hは、クリックでそれぞれプログラミング・コードへジャンプします。
 
 
@ GFortran↑ ↓ 

Fortran95(Fortran90) コード (コンソール・アプリ)
* loopCal.f90

program array_section2d
implicit none
integer i,N

real,allocatable,dimension(:) :: a
real :: start_time,end_time
real ::s

N = 1;
print *,"GFotran ループ計算  do i = 1, N;  na(i) = 0;  end do;"
do while(N>0)
  print *,"数値入力してください (零入力で閉じます)"
  write (*,fmt='(a)', advance='no') " 配列要素数 N = "  !改行なし!
  read '(I11)', N
  call cpu_time(start_time)

  allocate( a(N) )
  
  do i = 1, N
    a(i) = 0;
  end do
  call cpu_time(end_time)
  s = end_time - start_time
  
  write(*,*) "完了   配列サイズ",size(a)
  write(*,*) "値確認  a(",N,") =",a(N)
  write(*,*) "時間  ", s, "sec"
  print *,"-------------------------------------"
  deallocate(a) 
end do

end program array_section2d
備考
・アプリ・ソース(上記):loopCal.f90 (0.8KB)、実行ファイル:loopCal_f90.exe (124KB)
フォートラン
・TDM-GCC MinGW64 機能 C++/fortran(オプション並列計算)、本計算での使用は GFortran (Windows 64bit)
・Fortran 95 をサポート。 (入手先:http://tdm-gcc.tdragon.net/、インストール・ファイル tdm64-gcc-4.6.1.exe)
・なお、GFortran(ジーフォートラン)は、GNU Fortran compilerの名前であり、GNUコンパイラコレクション (GCC) の一部となっている。
・インストール済確認: コマンドプロンプトを開き バージョン情報のコマンド gfortran -v で gcc version 4.6.1 を確認
コンパイル方法
・コマンドプロンプトをファイルの場所に移動: cd "ディレクトリ" 例えばファイルの場所が D:\ の場合には cd /d D:\
"GFortran" "ソースファイル名" 例、gfortran loopCal.f90 にて実行ファイル a.exe が生成される。
・別名にコンパイルするには、 "gfortran" -o "生成ファイル名" "ソースファイル名" 例、gfortran -o loopCal_f90.exe loopCal.f90
ショートカット: 上記のコンパイル操作をクリック操作だけで行えるようにするには
・エクスプローラで ソースファイル(loopCal.f90)のディレクトリで 右クリック→新規作成ショートカット
 →項目の場所を入力 gfortran -o loopCal_f90.exe loopCal.f90 次へショートカットの名前 (例、loopCal_f90.exeの生成) →完了
・作成されたショートカットの確認・修正:「loopCal_f90.exeの作成」を右クリックでプロパティを出す。
 →リンク先 フル・ルート (例、C:\MinGW64\bin\gfortran.exe -o loopCal_f90.exe loopCal.f90)で記述となっているのを確認
 → exeファイル生成場所をカレントディレクトリにする為 作業フォルダの欄 を削除(空白)する → OK
実施結果
 ・計算量Nの最大限度: 14億 (1.4・109) (なお時間12秒、 物理メモリ 98% 、loopCal_f90.exe メモリ 3.2GB (64bit))
 ・限界超え通知あり System error: Not Enough Space (但し画面が直ぐ消える)

 
A Visual Basic↑ ↓ 

Visual Basic コード (コンソール・アプリ)
Module LoopCal_vb_Console
   'VB ループ計算
    Sub Main()

        Dim i, N As Integer            '符号付き 32 ビット整数 (約 -2.1e9〜2.1e9)
        Dim sttime, entime As Date     '日付宣言の変数 
        Dim a() As Double              '配列宣言(動的)
        Dim s As String = "VB ループ計算" + vbCrLf ''改行vbCrLf

        s += "  For i = 1 To N " + vbCrLf
        s += "    a(i) = 0 " + vbCrLf
        s += "    Next" + vbCrLf + vbCrLf
        Console.WriteLine(s & " 数値Nを入力(零入力で閉じる)")
        N = 1
        Do While N > 0

            Console.Write(vbCrLf & "  N = ")

            N = Double.Parse(Console.ReadLine())'指数入力可能
            sttime = DateTime.Now        '現時刻の日付変数

            ReDim a(N)
            For i = 1 To N
                a(i) = 0               'N回計算
            Next

            entime = DateTime.Now        '現時刻の日付変数
            Console.WriteLine(" 計算完了 " & (entime - sttime).TotalSeconds.ToString("0.000sec") & "  a(" & N & ") = " & a(N))

        Loop

    End Sub
End Module
備考
・統合開発環境(エディタ・コンパイラ・デバッガ):Visual Basic 2010 Express 又は Visual Studio 2012
・アプリ・ソース(上記):loopCal_vb_Console.vb (2KB)  --- エディタ上で作成
・ソリューション:loopCal_vb_Console.sln (2KB)     --- エクスプローラでslnファイルクリックでエディタ立上
・32bit デバッグ:loopCal_vb_Console.vshost.exe (23KB) --- エディタのDebug開始で生成
・64bit デバッグ:loopCal_vb_Console.vshost.exe (22KB) --- エディタのDebug開始で生成
・32bit 実行  :loopCal_vb_Console.exe (21KB)     --- エディタのRelease開始で生成(アプリ・実行ファイル)
・64bit 実行  :loopCal_vb_Console.exe (21KB)     --- エディタのRelease開始で生成(アプリ・実行ファイル)
 
エディタの立上(構成の設定):
・タグをクリック:ファイル新しいプロジェクト
・項目選択:Bisual Basic Windows 及び Windowsフォーム アプリ
・名前:アプリ・ファイル名を入れる (exe実行ファイル名) 例:loopCal_vb_Console
・場所:そのファイル作成場所を入れる ( 参照 を使用、Program Files 以外に、フォルダ作成)
・ソリューション名:同じ名前を入れる (ディレクトリ作成に) → OK

Module1.vb のコード(編集前)
Module Module1
  Sub Main()
  End Sub
End Module
 
 
Module名の変更(ファイル管理上)
・ソリューション・エクスプローラの Module1.vb を右クリックし「コードの表示」選択する。初期のコードは右上。
・ソリューション・エクスプローラのModule1.vbを右クリック「名前の変更」を選択、本例での loopCal_vb_Console.vb に変更する。
・ダイアログ「ファイルの名前を変更しようとしています。このプロジェクトのコード要素'Form1'への参照をすべて変更しますか」→はい(Y)
・これにより、ファイル名が Module1.vb から loopCal_vb_Console.vb に、モジュール名(語頭大文字)が Module1 から LoopCal_vb_Console に変更される。
・ exe実行ファイル名については、ソリューション・エクスプローラで「名前の変更」しても、コンパイルには変更なく、初期のexe名のが生成される。
コード修正・作成
・ loopCal_vb_Console.vbを「コードの表示」、この全コード4行を、上述のLoopCal_vs_Console.vbの全コード33行に入替える。(マウス操作・貼り付け)
・Module名の変更しない場合は、Sub Main(), End Sub の2行を、上述コード Sub Main()〜End Sub の約31行に入れ替える。(マウス操作・貼り付け)
デバッグ
Debugで デバッグ開始でプログラム起動し、Debug関係構成される。 Rereaseで 同様に行うと、プログラム起動、exe実行ファイルが生成される。
32bit、64bit の設定 
ビルド→構成マネージャで、プラットフォームを x86(32bit), AnyCPU(64bit) の切替え。(Express では不可)

実施結果 計算量Nの最大限度 
   32bit 設定の場合:N= 1.6・108 (時間 0.7秒 メモリ loopCal_vb_Console.exe 1.3GB(32bit))
   64bit 設定の場合:N= 2.6・108 (時間 1.3秒 メモリ loopCal_vb_Console.exe 2.0GB(64bit))
   限界超え通知 Out of Memory Exeption (メモリ不足エラー)、 箇所:下記黄色部(デバッグで判明)

 
Visual Basic コード (ウインドウズ・アプリ)↑ ↓ 
LoopCal_vb_w.Designer.vb
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class LoopCal_vb_w
    Inherits System.Windows.Forms.Form

    'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Windows フォーム デザイナで必要です。
    Private components As System.ComponentModel.IContainer

    'メモ: 以下のプロシージャは Windows フォーム デザイナで必要です。
    'Windows フォーム デザイナを使用して変更できます。  
    'コード エディタを使って変更しないでください。
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.Label1 = New System.Windows.Forms.Label()
        Me.TextBox1 = New System.Windows.Forms.TextBox()
        Me.GO = New System.Windows.Forms.Button()
        Me.Label2 = New System.Windows.Forms.Label()
        Me.Label3 = New System.Windows.Forms.Label()
        Me.Label6 = New System.Windows.Forms.Label()
        Me.Label7 = New System.Windows.Forms.Label()
        Me.Label8 = New System.Windows.Forms.Label()
        Me.Label4 = New System.Windows.Forms.Label()
        Me.SuspendLayout()
        '
        'Label1
        '
        Me.Label1.AutoSize = True
        Me.Label1.Font = New System.Drawing.Font("MS UI Gothic", 11.0!)
        Me.Label1.Location = New System.Drawing.Point(21, 66)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(94, 15)
        Me.Label1.TabIndex = 6
        Me.Label1.Text = "要素数N の値"
        '
        'TextBox1
        '
        Me.TextBox1.Font = New System.Drawing.Font("MS UI Gothic", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte))
        Me.TextBox1.Location = New System.Drawing.Point(24, 84)
        Me.TextBox1.Name = "TextBox1"
        Me.TextBox1.Size = New System.Drawing.Size(165, 23)
        Me.TextBox1.TabIndex = 7
        '
        'GO
        '
        Me.GO.Location = New System.Drawing.Point(195, 84)
        Me.GO.Name = "GO"
        Me.GO.Size = New System.Drawing.Size(75, 23)
        Me.GO.TabIndex = 8
        Me.GO.Text = "GO"
        Me.GO.UseVisualStyleBackColor = True
        '
        'Label2
        '
        Me.Label2.AutoSize = True
        Me.Label2.Location = New System.Drawing.Point(21, 132)
        Me.Label2.Name = "Label2"
        Me.Label2.Size = New System.Drawing.Size(53, 12)
        Me.Label2.TabIndex = 9
        Me.Label2.Text = "開始時刻"
        '
        'Label3
        '
        Me.Label3.AutoSize = True
        Me.Label3.Font = New System.Drawing.Font("MS 明朝", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte))
        Me.Label3.Location = New System.Drawing.Point(91, 131)
        Me.Label3.Name = "Label3"
        Me.Label3.Size = New System.Drawing.Size(98, 13)
        Me.Label3.TabIndex = 10
        Me.Label3.Text = "_____________"
        '
        'Label6
        '
        Me.Label6.AutoSize = True
        Me.Label6.Location = New System.Drawing.Point(22, 153)
        Me.Label6.Name = "Label6"
        Me.Label6.Size = New System.Drawing.Size(53, 12)
        Me.Label6.TabIndex = 13
        Me.Label6.Text = "計算時間"
        '
        'Label7
        '
        Me.Label7.AutoSize = True
        Me.Label7.Font = New System.Drawing.Font("MS 明朝", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte))
        Me.Label7.Location = New System.Drawing.Point(91, 153)
        Me.Label7.Name = "Label7"
        Me.Label7.Size = New System.Drawing.Size(98, 13)
        Me.Label7.TabIndex = 14
        Me.Label7.Text = "_____________"
        '
        'Label8
        '
        Me.Label8.AutoSize = True
        Me.Label8.Font = New System.Drawing.Font("MS 明朝", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte))
        Me.Label8.Location = New System.Drawing.Point(26, 9)
        Me.Label8.Name = "Label8"
        Me.Label8.Size = New System.Drawing.Size(89, 24)
        Me.Label8.TabIndex = 15
        Me.Label8.Text = "For i = 1 To N" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "   a(i) = 0"
        '
        'Label4
        '
        Me.Label4.AutoSize = True
        Me.Label4.Location = New System.Drawing.Point(26, 33)
        Me.Label4.Name = "Label4"
        Me.Label4.Size = New System.Drawing.Size(29, 12)
        Me.Label4.TabIndex = 16
        Me.Label4.Text = "Next"
        '
        'LoopCal_w
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.ClientSize = New System.Drawing.Size(278, 175)
        Me.Controls.Add(Me.Label4)
        Me.Controls.Add(Me.Label8)
        Me.Controls.Add(Me.Label7)
        Me.Controls.Add(Me.Label6)
        Me.Controls.Add(Me.Label3)
        Me.Controls.Add(Me.Label2)
        Me.Controls.Add(Me.GO)
        Me.Controls.Add(Me.TextBox1)
        Me.Controls.Add(Me.Label1)
        Me.Name = "LoopCal_w"
        Me.Text = "VB スクリプト"
        Me.ResumeLayout(False)
        Me.PerformLayout()

    End Sub
    Friend WithEvents Label1 As System.Windows.Forms.Label
    Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
    Friend WithEvents GO As System.Windows.Forms.Button
    Friend WithEvents Label2 As System.Windows.Forms.Label
    Friend WithEvents Label3 As System.Windows.Forms.Label
    Friend WithEvents Label6 As System.Windows.Forms.Label
    Friend WithEvents Label7 As System.Windows.Forms.Label
    Friend WithEvents Label8 As System.Windows.Forms.Label
    Friend WithEvents Label4 As System.Windows.Forms.Label

End Class

LoopCal_vb_w.vb
'Visual Basic

Option Explicit On
Option Strict On

Public Class LoopCal_vb_w  'フォルダ  LoopCal_w.vb

    'マウスクリック 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GO.Click
        Call MAIN()
    End Sub

    'コンソールのデザイン
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub


    'メインスのクリプト
    Private Sub MAIN()

        Dim i,N As Integer            '符号付き 32 ビット整数 (約 -2.1e9〜2.1e9)
         Dim d As Double

        d = Double.Parse(TextBox1.Text)  '入力ボックスの文字を数値変換して代入(指数入力可能)
        N = CType(d, Integer)        'DoubleからIntegerへキャスト

        Dim sttime As Date           '日付宣言の変数
        sttime = DateTime.Now        '現時刻の日付変数
        Label3.Text = Now.ToString   '現時刻を文字変換して表示

        Dim a(N) As Double      '64 ビット の符号付き浮動小数点数の配列宣言
        For i = 1 To N
            a(i) = 0.0               'N回計算
        Next

        Dim entime As Date           '計算終了時刻

        entime = DateTime.Now        '現時刻の日付変数
        Label7.Text = (entime - sttime).TotalSeconds.ToString("0.00sec")  '時間を文字変換して表示

        MessageBox.Show(N.ToString() & " 計算 完了")      'メッセージボックスの表示

    End Sub
End Class
備考
・統合開発環境(エディタ・コンパイラ・デバッガ):Visual Basic 2010 Express 又は Visual Studio 2012
・アプリ・ソース(上記):LoopCal_vb_w.vb (2KB)   --- エディタで作成
・ソリューション:LoopCal_vb_w.sln (2KB)     --- エクスプローラでslnファイルクリックでエディタ立上
・デザインソース:LoopCal_vb_w.Designer.vb (6KB) --- エディタのデザイナで概略作成
・32bit デバッグ:LoopCal_vb_w.vshost.exe (23KB) --- エディタのDebug開始で生成
・64bit デバッグ:LoopCal_vb_w.vshost.exe (22KB) --- エディタのDebug開始で生成
・32bit 実行  :LoopCal_vb_w.exe (28KB)     --- エディタのRelease開始で生成(32bitアプリ・実行ファイル)
エディタの立上(構成の設定)
・タグをクリック:ファイル新しいプロジェクト
・項目選択:Bisual Basic Windows 及び Windowsフォーム アプリ
・名前:アプリ・ファイル名を入れる (exe実行ファイル名) 本例、LoopCal_vs_w
・場所:そのファイル作成場所を入れる ( 参照 を使用、Program Files 以外に、フォルダ作成)
    (なお、新規ファイルをフルパスで入力では、新規ファイルを自動作成されるが、参照を使用するとフルパスならない)
・ソリューション名:同じ名前を入れる (ディレクトリ作成に ) → OK
クラス名の変更とコード編集 ( なおデフォルトでのクラス名は Form1 )
・ソリューション・エクスプローラに、 数個横並びアイコンがあり、「すべてのファイルを表示」を選択する。
Form1.vb 及び その下位の Form1.Designer.vb に対し、右クリック「コードの表示」選択し、下記コードとなっているを確認。
・ソリューション・エクスプローラの Form1.vb を右クリック「名前の変更」選択し、本例での LoopCal_vb_w.vb に変更する。
・ダイアログ「ファイルの名前を変更しようとしています。このプロジェクトのコード要素'Form1'への参照をすべて変更しますか」→はい(Y)
・これにより、ファイル名が LoopCal_vb_w.vb 及び LoopCal_vb_w.Designer.vb に変更され、クラス名が Form1 から LoopCal_vb_w に変更される。
・この2つのファイルのコードを、本例上記の2つのコードにそれぞれまるごと入れ替える(マウスで範囲指定、コピー・貼り付け操作)
・なお、exeファイル名については、ソリューション・エクスプローラでの「名前の変更」しても、コンパイルは、初期設定のexe名で生成がされる。
 Form1.Designer.vb (初期ファイル名) と 内容(コード) Form1.vb (初期ファイル名) と 内容(コード)

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
    Inherits System.Windows.Forms.Form

    'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Windows フォーム デザイナーで必要です。
    Private components As System.ComponentModel.IContainer

    'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
    'Windows フォーム デザイナーを使用して変更できます。  
    'コード エディターを使って変更しないでください。
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        components = New System.ComponentModel.Container()
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.Text = "Form1"
    End Sub
End Class

Public Class Form1

End Class



デバッグ
Debugで デバッグ開始でプログラム起動し、Debug関係構成される。 Rereaseで 同様に行うと、プログラム起動、exe実行ファイルが生成される。
32bit、64bit の設定 (Express では切替え不可)
ビルド構成マネージャで、プラットフォームを x86(32bit), AnyCPU(64bit) の切替え。又は AnyCPU(32bit),x64(64bit)の切替え

実施結果 計算量Nの最大限度 
・32bit 設定の場合:N= 1.6・108 (メモリ 0.9GB、時間 0.9秒(デバッグ) 0.6秒(実行))
・64bit 設定の場合:N= 2.6・108 (メモリ 2.0GB、時間 3.1秒(デバッグ) 1.0秒(実行))
・限界超え通知 Out of Memory Exeption(メモリ不足エラー)、 箇所:下記黄色部(デバッグで判明)

 
B Visual C#↑ ↓ 

C# コード (コンソール・アプリ)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Loop_Cal_Console_cs
{
    class Loop_Cal_Console
    {
        static void Main(string[] args)
        {
            int i, N;
            double d;
            double[] a = new double[1];  //配列初期設定
            Console.WriteLine("C# 配列要素変更テスト Array.Resize<double>(ref a, N) ;\n");
            
            Console.WriteLine("ループ計算");
            Console.WriteLine("for (i = 1; i <= N; i++) { a[i] = 0; }");
            Console.WriteLine("配列要素数 N の値を入力 Enter して下さい。(零値入力で閉じます)");
            
            do
            {
                Console.WriteLine("----------------------------");
                Console.Write("値を入力 N = ");
                d = double.Parse(Console.ReadLine());     //入力ボックスの文字を数値変換して代入
                N = (int)d;
                DateTime sttime = DateTime.Now;        //日付宣言の変数に現在時刻を代入
                Array.Resize<double>(ref a, (N + 1));    //配列リサイズの変更
                for (i = 1; i <= N; i++) { a[i] = 0; }  //計算
                Console.WriteLine("計算完了 a[" + (i - 1) + "] = " + a[i - 1]); //確認の表示

                DateTime entime;             //時刻宣言            
                entime = DateTime.Now;       //現在時刻
                Console.WriteLine("処理時間 " + (entime - sttime).TotalSeconds.ToString("0.000sec"));

            }
            while (N > 0);
        }
    }
}
備考
・統合開発環境(エディタ・コンパイラ・デバッガ):Visual C# 2010 Express 又は Visual Studio 2012
・アプリ・ソース(上記):Loop_Cal_Console.cs (2KB) --- エディタで作成
・ソリューション :Loop_Cal_Console_cs.sln (2KB) --- エディタの立上
・デバッグ(32bit):Loop_Cal_Console_cs.exe (6KB) --- エディタのDebug開始で生成
・デバッグ(64bit):Loop_Cal_Console_cs.exe (5KB) --- エディタのDebug開始で生成
・実行(32bit)  :Loop_Cal_Console_cs.exe (6KB) --- エディタのRelease開始で生成(32bit アプリ・実行ファイル)
・実行(64bit)  :Loop_Cal_Console_cs.exe (5KB) --- エディタのRelease開始で生成(64bit アプリ・実行ファイル)
 なお、Visual Studio 2012のC#と、Visual C# 2010との ソリューションは 互換性あり。Visual C# 2010 は 32bit のみ、64bitなし。
 
Visual Studioの立上(構成の設定):
・タグをクリック:ファイル新しいプロジェクト
・項目選択:Visual C# 及び コンソール アプリ
・名前:WindowsFormsApplication1をアプリ・ファイル名にする (exe実行ファイル名)。 例:Loop_Cal_Console_cs
・場所:そのファイル作成場所を入れる ( 参照 を使用、Program Files 以外に、フォルダ作成)
・ソリューション名:WindowsFormsApplication1を上記名前にする (sln実行ファイル名)。 ・(ディレクトリ作成に) → OK
Visual C# 2010の場合
・「名前」ConsoleApplication1 の欄でOKし、ファイル→名前を付けてConsoleApplication1を保存で「名前・場所・ソリューション名」の記入欄が出る。
 Visual Studioの場合と同様に入力(一度限りの設定)する。 以降、デバッグ操作ごとに、その「場所」へ exeファイルが更新保存される。
ソースの編集
Program.cs のコード (Loop_Cal_Console_csに変更前)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Loop_Cal_Console_cs
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}
 ・ソリューション・エクスプローラで、Program.csを「コードの表示」し、左記コードが出る。
 ・左記11〜13行目のstatic void Main(string[] args){}
  上記11〜40行目の static void Main(string[] args){ int i,N; ・・・ while(N > 0); }
  入替える。デバッグで起動確認する。
 ソース名 Program.cs を変更する場合
 ・ソリューション・エクスプローラでこれを右クリック「名前の変更」を選択
  例えば Loop_Cal_Console.cs に変更する。
 ・ダイアログが出る
   「ファイル名前を変更しようとしています。このプロジェクトの
    コード要素 'Program' への参照すべと変更しますか」 → はい
 ・これによりclass 名が Program から Loop_Cal_Console に替わる。
  デバッグして 起動確認する。
実施結果 計算量Nの最大限度
・32bit N = 1.8・108 (時間 0.8秒、メモリ Loop_Cal_Console_cs.exe 1.4GB)
・64bit N = 1.8・108 (時間 0.8秒、メモリ Loop_Cal_Console_cs.exe 1.4GB)、 N = 2.2・108 (4.0秒、メモリ 3.04GB、物理メモリ95%)
・限界超え通知 Out of Memory Exeption (メモリ不足エラー)、 箇所:下記黄色部(デバッグで判明)

 
C# コード (ウインドウズ・アプリ)↑ ↓ 
LoopCal_w_cs.Designer.cs
namespace LoopCal_w_cs
{
    partial class LoopCal_w_cs
    {
        /// <summary>
        /// 必要なデザイナー変数です。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        /// <param name="disposing">マネージ リソースが破棄される場合 true、破棄されない場合は false です。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows フォーム デザイナーで生成されたコード

        /// <summary>
        /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディターで変更しないでください。
        /// </summary>
        private void InitializeComponent()
        {
            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.button1 = new System.Windows.Forms.Button();
            this.label2 = new System.Windows.Forms.Label();
            this.label3 = new System.Windows.Forms.Label();
            this.label5 = new System.Windows.Forms.Label();
            this.label9 = new System.Windows.Forms.Label();
            this.label4 = new System.Windows.Forms.Label();
            this.label7 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // toolStrip1
            // 
            this.toolStrip1.BackColor = System.Drawing.SystemColors.ControlLight;
            this.toolStrip1.Font = new System.Drawing.Font("MS UI Gothic", 11F);
            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
            this.toolStrip1.Name = "toolStrip1";
            this.toolStrip1.Size = new System.Drawing.Size(209, 25);
            this.toolStrip1.TabIndex = 0;
            this.toolStrip1.Text = " for (i = 1; i <= N; i++)";
            // 
            // textBox1
            // 
            this.textBox1.Font = new System.Drawing.Font("MS UI Gothic", 11F);
            this.textBox1.Location = new System.Drawing.Point(12, 53);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(116, 22);
            this.textBox1.TabIndex = 3;
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(10, 38);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(75, 12);
            this.label1.TabIndex = 4;
            this.label1.Text = "要素数N の値";
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(134, 53);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(57, 23);
            this.button1.TabIndex = 5;
            this.button1.Text = "GO";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.toolStripButton1_Click);
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(12, 9);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(260, 12);
            this.label2.TabIndex = 6;
            this.label2.Text = "C# スクリプト     for (i = 1; i <= N; i++){ f[i] = 0.; }\r\n";
            // 
            // label3
            // 
            this.label3.AutoSize = true;
            this.label3.Font = new System.Drawing.Font("MS UI Gothic", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));
            this.label3.Location = new System.Drawing.Point(12, 9);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(164, 13);
            this.label3.TabIndex = 7;
            this.label3.Text = "for (i=1; i<=N; i++){ a[i] = 0; }\r\n";
            // 
            // label5
            // 
            this.label5.AutoSize = true;
            this.label5.Location = new System.Drawing.Point(12, 100);
            this.label5.Name = "label5";
            this.label5.Size = new System.Drawing.Size(53, 12);
            this.label5.TabIndex = 4;
            this.label5.Text = "開始時刻";
            // 
            // label9
            // 
            this.label9.AutoSize = true;
            this.label9.Location = new System.Drawing.Point(12, 123);
            this.label9.Name = "label9";
            this.label9.Size = new System.Drawing.Size(53, 12);
            this.label9.TabIndex = 8;
            this.label9.Text = "計算時間";
            // 
            // label4
            // 
            this.label4.AutoSize = true;
            this.label4.Location = new System.Drawing.Point(88, 100);
            this.label4.Name = "label4";
            this.label4.Size = new System.Drawing.Size(65, 12);
            this.label4.TabIndex = 14;
            this.label4.Text = "----------";
            // 
            // label7
            // 
            this.label7.AutoSize = true;
            this.label7.Location = new System.Drawing.Point(88, 123);
            this.label7.Name = "label7";
            this.label7.Size = new System.Drawing.Size(65, 12);
            this.label7.TabIndex = 15;
            this.label7.Text = "----------";
            // 
            // LoopCal_w_cs
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(209, 146);
            this.Controls.Add(this.label7);
            this.Controls.Add(this.label4);
            this.Controls.Add(this.label3);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.label9);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.label5);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.toolStrip1);
            this.Controls.Add(this.label2);
            this.Name = "LoopCal_w_cs";
            this.Text = "C# Loop Calculation";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.ToolStrip toolStrip1;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.Label label5;
        private System.Windows.Forms.Label label9;
        private System.Windows.Forms.Label label4;
        private System.Windows.Forms.Label label7;
    }
}

LoopCal_w.cs
//Microsoft Visual Studio
//Visual C#
//アセンブリ名 LoopCal_w_cs

using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace LoopCal_w_cs{
    public partial class LoopCal_w_cs : Form {
        public LoopCal_w_cs(){ InitializeComponent();}
        private void Form1_Load(object sender, EventArgs e){ }
        private void toolStripButton1_Click(object sender, EventArgs e){ //マウスクリック
            main_part();
        }


        private void main_part() {
            int i, N;      //符号付き 32 ビット整数 (約 -2.1e9〜2.1e9)
            double d;
            d = double.Parse(textBox1.Text);   //入力ボックスの文字を数値変換して代入
            N = (int)d;
            DateTime  sttime = DateTime.Now;//日付宣言の変数に現在時刻を代入
            label4.Text = sttime.ToString();//文字型にして表示

            double[] a = new double[N + 1]; //64 ビットの浮動小数点数値の配列
            for (i = 1; i <= N; i++){ a[i] = 0.0; }  //計算

            //計算時間
            DateTime entime;             //時刻宣言            
            entime = DateTime.Now;       //現在時刻
            label7.Text = (entime - sttime).TotalSeconds.ToString("0.000sec"); //時間表示

            MessageBox.Show("ループ計算\na [ " +(i-1) + " ] = "+ a[i-1]+"  完了");   //メッセージボックスを表示
            
        }
    }
}

備考
・統合開発環境(エディタ・コンパイラ・デバッガ):Visual # 2010 Express 又は Visual Studio 2012
・アプリ・ソース(上記):LoopCal_w.cs (2KB)     --- エディタで作成
・アプリ・ソース :LoopCal_w.cs (2KB)       --- エディタで作成
・デザインソース:LoopCal_w_cs.Designer.cs (8KB) --- エディタのデザイナで概略作成
・ソリューション:LoopCal_w_cs.sln (2KB)     --- エクスプローラでslnファイルクリックでエディタ立上
・32bit デバッグ:LoopCal_w_cs.vshost.exe (23KB) --- エディタのDebug開始で生成
・64bit デバッグ:LoopCal_w_cs.vshost.exe (22KB) --- エディタのDebug開始で生成
・32bit 実行  :LoopCal_w_cs.exe (11KB)     --- エディタのRelease開始で生成(32bitアプリ・実行ファイル)
Visual Studioの立上(構成の設定):
・タグをクリック:ファイル新しいプロジェクト
・項目選択:Visual C# 及び コンソール アプリ
・名前:アプリ・ファイル名を入れる (アセンブリ名(exe実行ファイル名)) 例:LoopCal_w_cs
・場所:そのファイル作成場所を入れる ( 参照 を使用、Program Files 以外に、フォルダ作成)
・ソリューション名:同じ名前を入れる (ディレクトリ作成に) → OK
Visual C# 2010の場合
・「名前」WindowsFormsApplication1 の欄を 例えばLoopCal_w_csにし OK、ファイル→名前を付けてLoopCal_w_cs を保存
 「名前・場所・ソリューション名」の記入欄が出るので、名前、ソリューション名とも:例、LoopCal_w_cs
・「場所」はフルパスの入力では、新規フォルダは生成される。カレント既存フォルダの場合は、フォルダ名のみ入力でよい。
 以降、デバッグ操作ごとに、その設定した「場所」へ exeファイルが保存更新される。
ソースの編集
 ソリューションエクスプローラで Form1.Designer.cs を右クリック「コードの表示」
Form1.Designer.cs のコード (LoopCal_w_cs.csに変更前)
namespace LoopCal_w_cs
{
   partial class Form1
   {
      /// <summary>
      /// 必要なデザイナー変数です。
      /// </summary>
      private System.ComponentModel.IContainer components = null;

      /// <summary>
      /// 使用中のリソースをすべてクリーンアップします。
      /// </summary>
      /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。
      protected override void Dispose(bool disposing)
      {
         if (disposing && (components != null))
         {
                components.Dispose();
         }
          base.Dispose(disposing);
      }

      #region Windows フォーム デザイナーで生成されたコード

      /// <summary>
      /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
      /// コード エディターで変更しないでください。
      /// </summary>
      private void InitializeComponent()
      {
         this.components = new System.ComponentModel.Container();
         this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
         this.Text = "Form1";
      }

        #endregion
   }
}

 
・ソリューション・エクスプローラで、Program.csを右クリックし
「コードの表示」選択で、左記コードが出る。
 
・左記11〜13行目
 static void Main(string[] args){}
 
 上記11〜40行目の
  static void Main(string[] args){ int i,N; ・・・ while(N > 0); }
 
 に入替える。デバッグで起動確認する。

実施結果 計算量Nの最大限度 
・32bit 設定の場合:N= 1.2・108 (メモリ 0.9GB、時間 0.9秒(デバッグ) 0.6秒(実行))
・64bit 設定の場合:N= 2.6・108 (メモリ 2.0GB、時間 3.5秒(デバッグ) 1.3秒(実行))
・限界超え通知 Out of Memory Exeption(メモリ不足エラー)、 箇所:下記黄色部(デバッグで判明)
 
 
C C++↑ ↓ 

C++ コード (コンソール・アプリ)
//C++ ループ計算

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define scanf scanf_s //error C4996: 'scanf'を回避

int _tmain(int argc, _TCHAR* argv[])
{
   printf("\n C++ コンソール・アプリ\n");
   printf("\n ループ計算");
   printf("\n for ( i = 0; i <= N; i++){ a[i] = 0;}\n"); 

   int    i;
   int N = 0; //要素数 (前回テストでの限界 180000000)
   double* a; //配列用のポインタ

   double  duration;
   clock_t start, finish;   
   do{
     printf("\n-----------------------------------------------------------");
     printf("\n 数値 N(半角)を入力下さい。(零入力で終了、なお指数入力不可)");
     printf("\n N = ");
     scanf(" %d",&N);
     
     start = clock();
     a = new double[N+1];
     for ( i = 0 ; i <= N ; i++){ *(a+i) = 0;} 
     
     finish = clock();
     
     printf(" 完了 a[%d] = %d", (i-1),a[i-1]);
     duration = (double)(finish - start) / CLOCKS_PER_SEC;
     printf("  処理時間 %2.1f 秒", duration );
     delete[] a;
     
   }
   while(N>0);
   
   printf("\n");
   return 0;
}
備考
・統合開発環境(エディタ・コンパイラ・デバッガ):Visual C++ 2010 Express 又は Visual Studio 2012
・アプリ・ソース(上記):loopCal_cpp_console.cpp (2KB)- エディタで作成
・ソリューション :loopCal_cpp_console.sln (2KB) --- エディタの立上
・デバッグ(32bit):loopCal_cpp_console.exe (30KB) --- エディタのDebug開始で生成
・デバッグ(64bit):loopCal_cpp_console.exe (38KB) --- エディタのDebug開始で生成
・実行(32bit)  :loopCal_cpp_console.exe (8KB) --- エディタのRelease開始で生成(32bit アプリ・実行ファイル)
・実行(64bit)  :loopCal_cpp_console.exe (9KB) --- エディタのRelease開始で生成(64bit アプリ・実行ファイル)
 
エディタの立上(構成の設定):
・タグをクリック:ファイル新しいプロジェクト
・項目選択:Visual C++ 及び コンソール アプリ
・名前:アプリ・ファイル名を入れる (exe実行ファイル名) 例:loopCal_cpp_console
・場所:そのファイル作成場所を入れる ( 参照 を使用、Program Files 以外に、フォルダ作成)
・ソリューション名:同じ名前を入れる (ディレクトリ作成に) → OK ソースの編集
・ソリューション・エクスプローラで「すべてのファイルを表示」し、loopCal_cpp_console.cppを「コードの表示」する。下記のコードが表示される。
・下記のコード 7行(編集前)を、上述コード 43行に総入替えする。(マウス操作・貼り付け)
 loopCal_cpp_consol.cpp のコード(編集前)
// loopCal_cpp_console.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}
デバッグ
Debugで デバッグ開始でプログラム起動し、Debug関係構成される。 Rereaseで 同様に行うと、プログラム起動、exe実行ファイルが生成される。
32bit、64bit の設定
ビルド構成マネージャで、プラットフォームを x86(32bit), AnyCPU(64bit) の切替え。(Express では不可)
エラー(不明)
・64bitコンパイルでエラー:Visual Studio 付属のコマンド・プロンプトより Vcvarsall.bat x86_amd64を入力 (なお 32bit に切替え Vcvarsall.bat)
・scanf(アプリ・ソース 26行目)のエラー(error C4996): コードを工夫する。
 例、8行目の #define scanf scanf_s (なお、#define _CRT_SECURE_NO_WARNINGS 又は #pragma warning(disable : 4996) でも回避可)
・PDB ファイルが見付からないエラー:ルート名に日本語名を付加している場合は英語名にする。
 
実施結果 計算量Nの最大限度
・32bit N= 2.0・108 (時間 0.8秒、メモリ 1.0GB)
・64bit N= 4.0・108 (時間 4.8秒、メモリ 2.9GB)、これよりNを大きくすると遅くなる N= 5.0・108 (時間 14秒、メモリ 3.0GB、物理メモリ 98%)
・限界超えで通知あり ハンドルされていない例外(メモリ不足エラー)、 箇所:下記黄色部(デバッグで判明)
 
 
 
C++ コード (ウインドウズ・アプリ)↑ ↓ 
loopCal_w_cpp.h(ヘッダーファイル)
#pragma once
#include <stdlib.h>
#include <time.h>

namespace loopCal_w_cpp {

#include <time.h>
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

   /// <summary>
   /// Form1 の概要
   /// </summary>
   public ref class Form1 : public System::Windows::Forms::Form
   {
   public:
     Form1(void)
     {
        InitializeComponent();
        //
        //TODO: ここにコンストラクター コードを追加します
        //
     }

     protected:
        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Label^  label1;
    protected: 
    private: System::Windows::Forms::Label^  label2;
    private: System::Windows::Forms::TextBox^  textBox1;
    private: System::Windows::Forms::Button^  button1;
    private: System::Windows::Forms::Label^  label3;
    private: System::Windows::Forms::Label^  label4;
    private: System::Windows::Forms::Label^  label5;
    private: System::Windows::Forms::Label^  label6;

    private:
        /// <summary>
        /// 必要なデザイナー変数です。
        /// </summary>
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
        /// <summary>
        /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディターで変更しないでください。
        /// </summary>
        void InitializeComponent(void)
        {
            this->label1 = (gcnew System::Windows::Forms::Label());
            this->label2 = (gcnew System::Windows::Forms::Label());
            this->textBox1 = (gcnew System::Windows::Forms::TextBox());
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->label3 = (gcnew System::Windows::Forms::Label());
            this->label4 = (gcnew System::Windows::Forms::Label());
            this->label5 = (gcnew System::Windows::Forms::Label());
            this->label6 = (gcnew System::Windows::Forms::Label());
            this->SuspendLayout();
            // 
            // label1
            // 
            this->label1->AutoSize = true;
            this->label1->Font = (gcnew System::Drawing::Font(L"MS ゴシック", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
                static_cast<System::Byte>(128)));
            this->label1->Location = System::Drawing::Point(13, 9);
            this->label1->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label1->Name = L"label1";
            this->label1->Size = System::Drawing::Size(209, 12);
            this->label1->TabIndex = 0;
            this->label1->Text = L"for ( i=1; i<=N; i++){ *(a+i)=0; }\r\n";
            // 
            // label2
            // 
            this->label2->AutoSize = true;
            this->label2->Font = (gcnew System::Drawing::Font(L"MS ゴシック", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
                static_cast<System::Byte>(128)));
            this->label2->Location = System::Drawing::Point(13, 43);
            this->label2->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label2->Name = L"label2";
            this->label2->Size = System::Drawing::Size(84, 13);
            this->label2->TabIndex = 1;
            this->label2->Text = L"要素数Nの値";
            // 
            // textBox1
            // 
            this->textBox1->Font = (gcnew System::Drawing::Font(L"MS ゴシック", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
                static_cast<System::Byte>(128)));
            this->textBox1->Location = System::Drawing::Point(16, 60);
            this->textBox1->Margin = System::Windows::Forms::Padding(4);
            this->textBox1->Name = L"textBox1";
            this->textBox1->Size = System::Drawing::Size(115, 23);
            this->textBox1->TabIndex = 2;
            // 
            // button1
            // 
            this->button1->Cursor = System::Windows::Forms::Cursors::Hand;
            this->button1->DialogResult = System::Windows::Forms::DialogResult::Abort;
            this->button1->Font = (gcnew System::Drawing::Font(L"MS ゴシック", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
                static_cast<System::Byte>(128)));
            this->button1->Location = System::Drawing::Point(139, 60);
            this->button1->Margin = System::Windows::Forms::Padding(4);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(67, 23);
            this->button1->TabIndex = 3;
            this->button1->Text = L"GO";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form1::Form1_Load);
            // 
            // label3
            // 
            this->label3->AutoSize = true;
            this->label3->Font = (gcnew System::Drawing::Font(L"MS ゴシック", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
                static_cast<System::Byte>(128)));
            this->label3->Location = System::Drawing::Point(13, 103);
            this->label3->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label3->Name = L"label3";
            this->label3->Size = System::Drawing::Size(63, 13);
            this->label3->TabIndex = 4;
            this->label3->Text = L"開始時刻\r\n";
            // 
            // label4
            // 
            this->label4->AutoSize = true;
            this->label4->Font = (gcnew System::Drawing::Font(L"MS ゴシック", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
                static_cast<System::Byte>(128)));
            this->label4->Location = System::Drawing::Point(98, 100);
            this->label4->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label4->Name = L"label4";
            this->label4->Size = System::Drawing::Size(112, 16);
            this->label4->TabIndex = 5;
            this->label4->Text = L"_____________\r\n";
            // 
            // label5
            // 
            this->label5->AutoSize = true;
            this->label5->Font = (gcnew System::Drawing::Font(L"MS ゴシック", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
                static_cast<System::Byte>(128)));
            this->label5->Location = System::Drawing::Point(13, 130);
            this->label5->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label5->Name = L"label5";
            this->label5->Size = System::Drawing::Size(63, 13);
            this->label5->TabIndex = 6;
            this->label5->Text = L"計算時間\r\n";
            // 
            // label6
            // 
            this->label6->AutoSize = true;
            this->label6->Font = (gcnew System::Drawing::Font(L"MS ゴシック", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
                static_cast<System::Byte>(128)));
            this->label6->Location = System::Drawing::Point(98, 127);
            this->label6->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label6->Name = L"label6";
            this->label6->Size = System::Drawing::Size(112, 16);
            this->label6->TabIndex = 7;
            this->label6->Text = L"_____________\r\n";
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(247, 156);
            this->Controls->Add(this->label6);
            this->Controls->Add(this->label5);
            this->Controls->Add(this->label4);
            this->Controls->Add(this->label3);
            this->Controls->Add(this->button1);
            this->Controls->Add(this->textBox1);
            this->Controls->Add(this->label2);
            this->Controls->Add(this->label1);
            this->Font = (gcnew System::Drawing::Font(L"MS ゴシック", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
                static_cast<System::Byte>(128)));
            this->Margin = System::Windows::Forms::Padding(4);
            this->Name = L"Form1";
            this->Text = L"C++ Loop Calculation";
            this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
            this->ResumeLayout(false);
            this->PerformLayout();

        }
#pragma endregion

  private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {

    int    i,N;
    double d; //要素数 (前回テストでの限界 1.8e8)
    double* a; //配列用のポインタ

    double  duration;
    clock_t start, finish;

    if ( textBox1->Text!= "" )
    {
       d = double::Parse(textBox1->Text);
       N = (int) d;
       start = clock();
       a = new double[N+1];
       for ( i = 1 ; i <= N ; i++){ *(a+i) = 0;}  
       finish = clock();

       duration = (double)(finish - start) / CLOCKS_PER_SEC;
       label4->Text = DateTime::Now.Hour + ":" + DateTime::Now.Minute + ":" + DateTime::Now.Second;
       label6->Text =  duration.ToString()+" 秒";
       MessageBox::Show("ループ計算\na [ "+N+" ] = 0  完了");
       delete[] a;
      }
  }
  };
}

loopCal_w_cpp.cpp
// loopCal_w_cpp.cpp : メイン プロジェクト ファイルです。

#include "stdafx.h"
#include "loopCal_w_cpp.h"
using namespace loopCal_w_cpp;

[STAThreadAttribute]
int main(array ^args)
{
	// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
	Application::EnableVisualStyles();
	Application::SetCompatibleTextRenderingDefault(false); 

	// メイン ウィンドウを作成して、実行します
	Application::Run(gcnew Form1());
}
備考
・統合開発環境(エディタ・コンパイラ・デバッガ):Visual C++ 2010 Express 又は Visual Studio 2012
・ヘッダファイル:loopCal_w_cpp.h (9KB)   ---- デザイナ及びエディタで作成 (事実上メインファイル)
・アプリ・ソース(上記):loopCal_w_cpp.cpp (1KB) - 自動作成されたままで編集なし
・ソリューション:loopCal_w_cpp.sln (1KB)  ---- エクスプローラでslnファイルクリックでエディタ立上
・32bit デバッグ:loopCal_w_cpp.exe (51KB) ---- エディタのDebug開始で生成
・64bit デバッグ:loopCal_w_cpp.exe (51KB) ---- エディタのDebug開始で生成
・32bit 実行  :loopCal_w_cpp.exe (48KB) ---- エディタのRelease開始で生成(32bitアプリ・実行ファイル)
・64bit 実行  :loopCal_w_cpp.exe (48KB) ---- エディタのRelease開始で生成(64bitアプリ・実行ファイル)
 なお、ヘッダでの宣言 #include <stdlib.h>及び #include <time.h> を切取り、メイン の #include "loopCal_w_cpp.h" の上へ挿入でもよい。
 
Visual C++ の立上(構成の設定):
新しいプロジェクトCLR Windows フォームアプリケーション
・名前:アプリ・ファイル名を入れる (exe実行ファイル名) 本例、loopCal_w_cpp
・場所:そのファイル作成場所を入れる ( 参照 を使用、Program Files 以外に、フォルダ作成)
   (なお、新規ファイルをフルパスで入力では、新規ファイルを自動作成されるが、参照を使用するとフルパスとならない)
・ソリューション名:同じ名前を入れる (ディレクトリ作成に ) → OK Form1.h の編集
・Form1.h [デザイン]のウインドウ上で、右クリック「コード表示」選択、又はソリューションエクスプローラの Form1.h を右クリック「コード表示」を選択。
・下記 Form1.h のコード 60行を、上記のloopCal_cpp_w.h のコード 220行 にまるごと入れ替える(マウスで範囲指定、コピー・貼り付け操作)
デバッグ開始 をし、起動を確認、これを debug と Release の両方で確認する。
・名前を統一する場合には、ソリューションエクスプローラでForm1.h を 右クリック「名前の変更lで oopCal_cpp_w.h に変更、
 loopCal_w_cpp.cpp の 「#include "Form1.h"」を「#include "loopCal_w_cpp.h"」に 変更する。
 ・Form1.h のコード (loopCal_cpp_w.h の変更前)
#pragma once

namespace loopCal_cpp_w {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary>
	/// Form1 の概要
	/// </summary>
	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		Form1(void)
		{
			InitializeComponent();
			//
			//TODO: ここにコンストラクター コードを追加します
			//
		}

	protected:
		/// <summary>
		/// 使用中のリソースをすべてクリーンアップします。
		/// </summary>
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}

	private:
		/// <summary>
		/// 必要なデザイナー変数です。
		/// </summary>
		System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
		/// components = gcnew System::ComponentModel::Container();
			this->Size = System::Drawing::Size(300,300);
			this->Text = L"Form1";
			this->Padding = System::Windows::Forms::Padding(0);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
		}
#pragma endregion
	};
}
エラー(原因不明)
 ・Visual C++ 2010 Express では、32bitのみ可能、64bitは コンパイルエラーでデバッグ不可能。
 ・Visual Studio 2012 での C++ 「新しいプロジェクト」に 「Windows フォームアプリケーション」がない。(原因不明)
 ・Visual C++ 2010 Express で生成したソリューションsln より、Visual Studio 2012を立上げ、64bit コンパイル生成する。
 ・Visual Studio 2012では IntelliSense に関するエラー5箇所あるが、32bit 及び 64bit 共、コンパイル、ディバッグ、ファイル生成は可能。
 ・Visual Studio 2012 でのコンパイル後、Visual C++ 2010 Express を用いるには、「新しいプロジェクト」からやり直す必要があり。
 
実施結果 計算量Nの最大限度
 ・32bit N = 1.6・108 (時間 1.0 秒、メモリ loopCal_w_cpp.exe 1.2GB)
 ・64bit N = 3.5・108 (時間 1.3 秒、メモリ loopCal_w_cpp.exe 2.7GB)、 N = 4.0・108 (時間 2.0 秒、メモリ loopCal_w_cpp.exe 2.9GB、物理メモリ 92%)
 ・限界超えて通知あり Out of Memory Exeption(メモリ不足エラー)、 箇所:下記黄色部(デバッグで判明)
 
 
 
D JScript↑ ↓ 

JScript コード (コンソール・アプリ)
//ファイル名:loopCal.js 

import System;
var k : int;
var N : int; 
do {

  System.Console.WriteLine("■JScript 配列 a[i] = 0; i=0〜N の計算です。\n■数値 N (例えば 1000000 又は 1e6 など)を入れて Enter。 零(0)の入力で終了。");
  Console.Write("N = ");

  N = Number(Console.ReadLine());
  k = N;
  var t : int =  Environment.TickCount; //時刻設定
  var a : double[] = new double[N+1]; //代用可 var a :  Array = new Array;
  for( var i : int = 0; i<=N; i++){a[ i ] = 0;}

  Console.Write("計算完了  a[" + N + "]="+ a[N]);
  Console.Write("  計算時間:"+( Environment.TickCount - t) + "ms");
  Console.Write("\n-----------------------------------------\n");

}
while(k>0);
備考
・アプリ・ソース(上記):loopCal.js (2KB)、 数値入力:指数可
・エディター:JavaScript の場合と同じ。 コンパイラ:コマンドプロンプトでのjsc.exe 起動・実行:下記「起動手順」参照。
・生成した実行ファイル:loopCal_32bit.exe (5KB), loopCal_64bit.exe (5KB)、デバッガー付加 loopCal_64bit_debug.exe (5KB)
実施結果 計算量Nの最大限度
・32bit N= 1.3・108 (時間 0.9秒、メモリ 1.2GB)
・64bit N= 2.5・108 (時間 3.3秒、メモリ2.0GB)
・64bit デバッガー付加 N= 2.5・108 (時間 4.4秒、メモリ2.0GB)
・限界の通知 Out of memory

 
JScript コード (ウインドウズ・アプリ)↑ ↓ 

//ファイル名:test.js

import System;
import System.Drawing;
import System.Windows.Forms;
import Accessibility;

var f : HelloForm = new HelloForm();
f.Font = new System.Drawing.Font("MS ゴシック", 10);
f.ShowDialog();

class HelloForm extends Form
{
    var text1 : TextBox;
    var btnDisplay : DisplayButton;
    var label1 : Label;
    var label2 : Label;

    function HelloForm()
    {
        super();
        this.Size = new System.Drawing.Size( 300, 160 );
        this.Text = "JScript ループ計算";

        label1 = new Label;
    label1.Location = new Point(20, 5);
        label1.Size = new System.Drawing.Size( 300, 45 );
        label1.Text = "for( var i:int=0; i<=N; i++){a[i] = 0;}\n\n数値N を入力";
this.Controls.Add( label1 ); text1 = new TextBox(); text1.Width = 100; text1.Font = new System.Drawing.Font("MS UI Gothic", 11); text1.Location = new Point(20, 50); Controls.Add(text1); btnDisplay = new DisplayButton(); Controls.Add(btnDisplay); label2 = new Label; label2.Size = new System.Drawing.Size( 300, 20 ); label2.Location = new Point(20, 100); label2.Text = "計算時間   -----------"; this.Controls.Add( label2 ); } } class DisplayButton extends Button { function DisplayButton() { super(); Text = "GO"; Location = new Point(130, 50); Size = new System.Drawing.Size( 60, 23 ); } protected override function OnClick(e : EventArgs) { var t : int = Environment.TickCount; //時刻設定 var N: int = Number(HelloForm(Parent).text1.Text); var a : double[] = new double[N+1]; for( var i : int = 0; i<=N; i++){a[ i ] = 0;} HelloForm(Parent).label2.Text ="計算時間 "+( Environment.TickCount - t) + " ms"; MessageBox.Show("計算完了\n\n a [ " + N + " ] = "+ a[N]); } }
備考
・アプリ・ソース(上記):loopCal_w.js (3KB)、 アプリ数値入力:指数可
・生成した実行ファイル:loopCal_w_32bit.exe (8KB), loopCal_w_64bit.exe (8KB)、デバッガー付加 loopCal_w_64bit_debug.exe (8KB)
 実行の不具合:コマンドプロンプト画面が出てその上にウインドアプリ画面が出る。
・起動手順
  @コマンドプロンプト(cmd.exe)のパスを設定する。 →詳細:JScript コードの作成、コンパイルおよびデバッグ
  Aコマンドプロンプトを開き、test.jsの場所に移動。例えば、その場所が C:\ であれば、cd C:\ をキー入力し Enter。
  Bコンパイルする。 jsc test.jsc をキー入力し Enter。 test.exe が生成され、これをクリックで起動する。
   オプション付の例、 32bit、出力名file.exe の場合は jsc /platform:x86 /out:file.exe test.jsc 64bitの場合は、x86を anycpu に入替。
  注、コンソール・アプリで画面が直ぐに消えてしまう場合:
    コマンドプロンプトから オプション k 付 ( file.exe /k ) を入力。または、Visual Studio で「デバッグなしで開始」。
 
実施結果 計算量Nの最大限度
・32bit N= 1.4・108 (時間 0.6秒、メモリ 1.1GB)
・64bit N= 2.6・108 (時間 1.7秒、メモリ2.0GB)
・64bit デバッガー付加 N= 2.6・108 (時間 3.1秒、メモリ2.0GB)
・限界の通知 Out of memory(アプリケーションのコンポーネントでハンドルされていない例外が発生しました。・・・・)

 
 
E JavaScript↑ ↓ 

JavaScript コード (HTMLファイル内に記述、ブラウザ内で読込み)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<head>
<title>ループ計算(JavaScript)</title>
<style type='text/css'>
BODY{margin-left:20px;letter-spacing:3px;line-height:40px;}
hr{position:relative;left:-20px;color:silver}
</style>

<SCRIPT LANGUAGE='JavaScript'>
<!--

document.onkeypress = control;
function control(x){
   var en;
   if (!x) var x = window.event;
   if(navigator.userAgent.indexOf("MSIE") != -1){en = event.keyCode;}
   else{en = (x.keyCode!=0)?x.keyCode:x.charCode;}
   if(en==13){start();}
}


function start(){
   var i,inp,N;
   inp = document.fn.n.value;
   if(inp==""){N = 0;}
   else if(inp.charCodeAt(0)>58){N = 0; alert("半角数字を入れて下さい");}
   else{N = eval(inp);}    // 数値文字から数値に変換 (指数も可)
   var sttime = new Date();
   var a = new Array();
   
   for(var i=1;i<=N;i++){a[ i ] = 0;}
   var t = (new Date() - sttime)/1000 ;
   var d = "  完了確認 a["+N+"] = "+ a[N]+"<br><nobr>  計算時間 "+ t + " sec (from "+sttime+")</nobr>";
   document.getElementById("results").innerHTML= d;
}

//-->
</script>
</head>

<BODY>
JavaScript<br>
<nobr>  ループ計算  for( i=1;i<=N;i++){ a[ i ] = 0; }</nobr><br>
<form name="fn">
<input type="text" NAME="dummy" style="display:none">
  N = <INPUT TYPE='text' NAME='n' SIZE='13' > <a href="javascript:void(0)" onclick="start()">Enter</a>
</form>

<hr size="1" style="position:relative;top:10px;">
実行結果<br>
<span id="results"></span><br> <br>
</body>
</HTML>
備考
・アプリ・ソース(上記): loopCal_JavaScript.html (2KB)
・ブラウザ Firefox ver.11 (リリース 2012-5-12)
  入手先:mozilla社の firefox/releases/11.0/win32/ja  または  old AppsのOld Version of FireFox
  なお、メニューの詳細更新で 更新の確認は行わない(非推奨 セキュリティリスク)を選択
     (注) インターネットWeb で使用の場合は セキュリティ上、 常に最新更新(ver.16) が好ましい。
  オプション機能を無効に設定: メニューのオプション一般アドオンを管理で プラグイン、拡張機能は 総て無効にする(右ボタンが有効化ならok)
 
実施結果 計算量Nの最大限度、N= 1.5・108 (時間12秒、メモリ firefox.exe 1.4GB 32bit)
   限界超え通知なし停止(Firefoxの場合)
 
F Java↑ ↓ 

Java コード (コンソール・アプリ)
import java.io.*;

public class LoopCal_java {
    public static void main(String[] args) {
        try{
              BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
              String s;
              int N,i; // 例えば N= 10000000
              double start, end, t;
              do{
                  System.out.println("Java 計算\nfor( int i = 0; i < N; i++ ){a[i] = 0;}");
                  System.out.println("ループ N の数値を入れて Enter (零を入れると停止)\n");
                  s = buf.readLine();
                  N = Integer.parseInt(s);
                  System.out.println("N is " + N);
               
                  start = System.currentTimeMillis();
                  double a[] = new double[N];

                  for( i = 0; i < N; i++ ){a[i] = 0;}
                     
                  end = System.currentTimeMillis();
                  t = (end - start)/1000;
                  System.out.println( "ループ計算時間  " + t +" 秒");
                  System.out.println( "-------------------------\n");
               }
               while(N>0);
               System.out.println( "終了しました");
        } catch (IOException e) { }
    }
}
備考
・アプリ・ソース(上記):C:\workspace1\LoopCalculation\src\LoopCal_java.java (サイズ: 1KB)、数値入力:指数不可
・統合開発環境:Eclipse IDE 1.5、jdk1.7.0_05、java 1.7.0_05 (エディター・Eclipse上でデバッグ・実行)
 (注)Eclipseは終了直前に自動的に状態保存され、起動すると前回の終了直前の状態となっている。
設定
(a)ウインドウのシステム環境設定で PATHの設定をしておく (編集部の最後に ;C:\Program Files\Java\jdk1.7.0_05\bin を追加)
(b)CLASSPATについては、通常は環境設定設定しない。
(c)Eclipseの設定 ウインドウプルダウンの「設定」よりメニューがでる(記述省略)
コンパイルと起動
(a)Eclipseを用いる場合
   @ 総てを保存(classファイルを含む):ファイルエクスポート一般ファイルシステム 選択し次へ→総て選択、宛先を入力し完了。
    → LoopCal_java.class (サイズ 2KB)
   A jar ファイルを保存:ファイルエクスポートJava実行可能 JARファイル 選択し次へ→起動構成、エクスポート先を入力し完了。
    → LoopCal_java_c.jar (サイズ 9KB)
   B 上記保存のclassファイル、またはjarファイル の起動方法は下記(b)を参照。
(b)プロンプト・コマントでjava コンパイルする方法
   @ コマンドプロンプトを立ち上げ、ファイルの場所に移動: cd "ディレクトリ" 例えばファイルの場所が D:\ の場合には cd /d D:\
   A コンパイル方法:"javac" "ファイル名"なので、コマンドから javac LoopCal_java.java これにて、LoopCal_java.class が生成される。
   B classファイルによる起動方法:"java" "クラス名" なので、java LoopCal_java にて java.exe 起動
     環境設定でCLASSPATHを他場所の設定の場合には、「メイン・クラスが見つからない」のエラーとなる故、上記に オプション classpath を付加し、
     D:\ であれば java -classpath D: LoopCal_java にする。
   C jarファイルの生成方法:"jar" cvfm "生成jarファイル名" "Manifestファイル" "クラスファイル" ここに Manifestにクラスを記述。従って
      テキストエディタで Main-Class: LoopCal_java の内容のファイル Manifest.fm を作成
      コマンドプロンプトから jar cvfm LoopCal_java.jar Manifest.mf LoopCal_java.class
   D jarファイルによる起動方法:"java" -jar "jarファイル" 従って、コマンドから  java -jar LoopCal_java.jar にて java.exe 起動
     尚、ウインドウアプリと違い エクスプローラでクリック開では起動しない
(c)ショートカットで起動
  ・LoopCal_java.jarの起動ショートカット (リンク先:C:\Windows\System32\java.exe -jar LoopCal_java.jar)
  ・LoopCal_java.class の起動ショートカット(リンク先:%windir%\system32\java.exe LoopCal_java)

(d)実行ファイル: jsmoothgen.exe に設定データ入力で実行ファイルを作成、なお、 LoopCal_java_c.jarを利用選択。
   → LoopCal_java_con.exe (32bit、サイズ 384KB)
   (注1)jsmoothgenは、立ち上り時の画面が最小となっているので、それを探し画面を通常サイズにする。
   (注2)設定データは新規入力ではエラーとなる、前回の成功したデータを呼込んで修正を行う。コンパイルが成功したら、この設定データを保存しておく。

実施結果 計算量Nの最大限度
・Eclipseのコンソール: N= 8・107 (時間 0.4 秒、メモリ javaw.exe 0.7GB、64bit)
・ショートカットによる起動(jar または class): N =8・107 (時間 0.4 秒、メモリ java.exe 0.7GB、64bit)
・LoopCal_java_con.exe: N= 2.2・107 (時間 0.2 秒、メモリ java.exe 0.2GB、32bit)
・限界超えの通知なし 画面コマンドプロンプトが消える、(なお、Eclipse上では通知あり OutOfMemoryError )、 発生箇所:上記の黄色部

 
 
Java コード (ウインドウズ・アプリ)  なお下記は、SwignなしAWTのみ使用↑ ↓ 
package localhost11;

import java.awt.*;
import java.awt.event.*;

class LoopCal_java_w_awt extends Frame implements ActionListener{
	private static final long serialVersionUID = 1L;
	TextField text1;
	Label label3;
	
	public static void main(String[] args) {LoopCal_java_w_awt frame = new LoopCal_java_w_awt();}  
        LoopCal_java_w_awt() {
    
	   super("Java ループ計算");
	   setBounds(150, 50, 300, 160);
	   setLayout(null);       
	   Label label1 = new Label("");
	   label1.setFont(new Font("MS 明朝",  Font.PLAIN, 14));
	   label1.setText("for( int i = 1; i <= N; i++ ){a[i] = 0;}");
	   label1.setBounds(20, 25, 230, 20);
	   add(label1);	     
	   
	   Label label2 = new Label("数値 N (入力例  80000000 )");
	   label2.setBounds(20, 60, 230, 20);
	   add(label2);
	           
	   text1 = new TextField("",10);
	   text1.setFont(new Font("MS 明朝",  Font.PLAIN, 16));
	   text1.setBounds(20, 80, 120, 25);
	   add(text1);
	        
	   Button b1 = new Button("GO");
	   b1.setBounds(150, 79, 70, 25);
	   b1.addActionListener(this);
	   add(b1);
	        
	   label3 = new Label("");
	   add(label3);
	   label3.setBounds(20, 120, 230, 20);
	   setVisible(true);
	   
 	   this.addWindowListener(new WindowAdapter(){
	   public void windowClosing(WindowEvent e){System.exit(0);}
	});
	
    }
    
    
	public void actionPerformed(ActionEvent e) {
	
	   String s;
	   int N,i; 
	   double start, end, t;
	   s = text1.getText();	 
	   N = Integer.parseInt(s);
	   
	   start = System.currentTimeMillis();
	    
	   double a[] = new double[N+1];
	   for( i = 1; i <= N; i++ ){ a[i] = 0;}
	          
	   end = System.currentTimeMillis();
	   t = (end - start)/1000;
	
	   label3.setText("完了 a["+N+"]= "+a[N]+"    " + t +" 秒");
	   text1.requestFocusInWindow();;
     }
}
備考
・アプリ・ソース(上記):LoopCal_java_w_awt.java (サイズ: 2KB)、数値入力:指数不可
・統合開発環境:Eclipse IDE 1.5、jdk1.7.0_05、java 1.7.0_05 (エディター・コンパイル・実行・デバッグ)
 Eclipseは終了直前に自動的に状態保存され、起動すると前回の終了直前の状態となっている。
設定 (a)ウインドウのシステム環境設定で PATHの設定をしておく (編集部の最後に ;C:\Program Files\Java\jdk1.7.0_05\bin を追加)
(b)CLASSPATについては、通常は環境設定設定しない。
(c)Eclipseの設定 ウインドウプルダウンの「設定」よりメニューがでる(記述省略)
コンパイルと起動
(a)Eclipseを用いる場合
   ★ 本例 1行目のパッケージ宣言 "package localhost11;" は、予めEclipse上で削除する。
    削除方法:削除後、実行すると、この行の左にエラーを示す、赤色×のマーキングが出るので、これをクリックする。
    package localhost11;を追加'LoopCal_java_w_awt.java' をデフォルト・パッケージへ移動 のガイドが出るので、移動の方を
    ダブルクリック選択し、実行してEclipseを終了する。
   @ 総てを保存(classファイルを含む):ファイルエクスポート一般ファイルシステム 選択し次へ→総て選択、宛先を入力し完了。
    → LoopCal_java_w_awt.class (サイズ 3KB)
   A jar ファイルを保存:ファイルエクスポートJava実行可能 JARファイル 選択し次へ→起動構成、エクスポート先を入力し完了。
    → LoopCal_java_w_awt.jar (サイズ3KB)
    なお、この「起動構成」はプルダウン中から最新のを選択、空白の場合は一旦エクスポートを終了して実行プルダウンの「実行構成」で確認。
   B 上記保存のclassファイル、またはjarファイルから起動する方法は下記(b)を参照。
(b)プロンプト・コマントでjava コンパイルする方法
   @ コマンドプロンプトを立ち上げ、ファイルの場所に移動。cd "ディレクトリ" なお、ファイルの場所が D:\ の場合には cd /d D:\
   A コンパイル方法: "javac" "ファイル名" なので、javac LoopCal_java_w_awt.java これにて、2個のclassファイル が生成される。
   B classファイルによる起動方法:
    "javaw" "クラス名" なのでので javaw LoopCal_java_w_awt で javaw.exe が起動。 java "クラス名" でも可能で java.exe が起動。
     環境設定で classpathを他場所の設定の場合には、「メイン・クラスが見つからない」のエラーとなる故、上記に オプション classpath を付加し、
     D:\ であれば javaw -classpath D: LoopCal_java_w_awt にて起動する。
    なお、classpath 設定確認は set claasspath、path1,path2に設定 set classpath=path1,path2 (例 set classpath=d: )、解除 set classpath=
   C jarファイルの生成方法:
      "jar" cvfm "生成jarファイル名" "Manifestファイル" "クラスファイル" ここに Manifestファイル にクラスを記述。従って
      テキストエディタで Main-Class: LoopCal_java_w_awt の内容のファイル Manifest.fm を作成
      コマンドプロンプトから jar cvfm LoopCal_java.jar Manifest.mf *.class で LoopCal_java_w_awt.jar が生成される。
   D jarファイルによる起動方法、エクスプローラから jarファイルを、即ち LoopCal_java_w_awt.jar をダブルクリックで javaw.exe が起動する。
    又はコマンドプロンプトで この "jarファイル" で起動、又は javaw -jar "クラスファイル" なので javaw -jar LoopCal_java_w_awt で起動。
    何故か誤って java -jar "クラスファイル"でも起動。
(c)ショートカットで起動
  ・LoopCal_java_w_awt.jarの起動ショートカット (リンク先:C:\Windows\System32\javaw.exe -jar LoopCal_java_w_awt.jar)
  ・LoopCal_java_w_awt.class を起動ショートカット(リンク先:%windir%\system32\javaw.exe LoopCal_java_w_awt)
exe実行ファイルの作成
(a)JSmooth 0.9.7 をダウンロード・インストール
(b)使用の留意点:
   ・立上げ時の画面が極端に小さいのでマウスで広げる。
   ・必ず、SystemプルダウンのOpenで 取り敢えず前回の xxx.jsmooth を呼込んだ後、その内容を修正設定。(直に設定はエラーとなる)
   ・なお、この呼込み直後、総てが空欄のままだが、左欄のクリックで内容が出る。
   ・エラー無く、exeファイルが生成出来たなら、設定内容をSave(上書保存)またはSave As(名前を付けて保存)して、次回の設定用に準備する。
   ・生成された exeは、ファイルサイズは大きく、計算容量は小さい。コンソール及びウインドウ共、32bitで、 限界N= 2・107 (0.2秒)
   コンソール・アプリ:ソース LoopCal_java.java (2KB)
    他: LoopCal_java_w_awt.classとLoopCal_java_w_awt$1.class合計(4KB)、LoopCal_java_w_awt.jar (3KB)、LoopCal_java_w_awt.exe (387KB)
   ウインドウズ・アプリ:ソース LoopCal_java_w_awt.java (2KB)
    他: LoopCal_java_w_awt.classとLoopCal_java_w_awt$1.class合計(4KB)、LoopCal_java_w_awt.jar (3KB)、LoopCal_java_w_awt.exe (387KB)
実施結果 計算量Nの最大限度
・Eclipse上: N= 8・107 (時間 0.5 秒、メモリ javaw.exe 0.7GB、64bit)
・ショートカットによる起動(jar または class): N =8・107 (時間 0.4 秒、メモリ java.exe 0.7GB、64bit)
・LoopCal_java_w_awt.exe: N= 2.2・107 (時間 0.2 秒、メモリ LoopCal_java_w_awt.exe 0.2GB、32bit)
・限界超えの通知なし 画面に変化なし、(なお、Eclipse上では通知あり OutOfMemoryError )、 発生箇所:上記の黄色部

 
G PHP↑ ↓ 

PHP コード (コマンドプロンプト内のphp.exeで起動)
<?php
//実行方法 コマンドラインから php test.php
$time_start = microtime(true);
$dN =  2.5e7;
$a = array();
for($i = 0; $i <= $dN; $i++) { $a[$i]  = 0;}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "ループ計算 N = ".$dN."\n";
echo "処理時間:".sprintf('%0.3f',$time)."秒";
exit();
?>
備考
・アプリ・ソース(上記):test.php (0.3KB)
・php.exe 5.2
起動方法
・コマンドプロンプトから php.exe **.php ( test.phpを C:\php\examplesにコピーの場合、C:\php\php.exe C:\php\examples\test.php )
コンパイル
・eclipse: Pleiades All in One PHP (PHP 開発用、但しphp.exe 4.2)入手先 http://mergedoc.sourceforge.jp/
・コンパイラ:bamcompile.exe 入手先 http://www.bambalam.se/bamcompile/
 なお、php.exe 4.2に対応、実行方法:コマンドラインから bamcompile test.php
 
実施結果 計算量Nの最大限度
・ N= 2.5・107 (時間 10.0 秒、メモリ php.exe 2.0GB、32bit)
・限界超えの通知あり、発生箇所:上記の黄色部
 Fatal error: Out of memory (allocated 1989935104) (tried to allocate 35 bytes) in C:\php\test.php on line 6

 
PHP コード (サーバルート下 ウエブ・ブラウザ上で起動) ↑ ↓ 
loopCal.php
<? extract($_GET);
$time_start = microtime(true);
$a = array();
for($i = 0; $i <= $dN; $i++) {$a[$i]  = 0;}
$time_end = microtime(true);
$time = $time_end - $time_start;
?>

<html><HEAD>
<style type='text/css'>
body{font-size:14px;MARGIN:20px;letter-spacing:1px;line-height:18px;}
</style>
<script language="JavaScript">
<!--

var na= "<? echo $dN;?>";
var nb= "<? echo $a[$dN];?>";
var nc= "<? echo $time;?>";

document.open();
document.write("完了  a["+na+"] = "+nb);
document.write("<br>時間  "+nc+" 秒");
document.close();
//-->
</script>
</HEAD>
<body>
</body>
</html>

loopCal_php.html
<HTML><HEAD>
<title>ループ計算</title>
<style type='text/css'>
  body{font-size:14px;MARGIN:30px;letter-spacing:2px;line-height:30px;}
</style>

<script language="JavaScript">
<!--

window.onload = onLoad(){
   document.getElementById("ta").value = "";
   document.getElementById("ta").focus();
};

function kaisi(){
    if(location.href.substring(0,16)!="http://localhost"){alert("サーバールート下ですか?"); }
    var N = document.getElementById("ta").value;
    if(document.all){window.ifr.location.href = "./loopCal.php?dN="+N;}
    else{document.getElementById("ifr").src = "./loopCal.php?dN="+N;}
    document.getElementById("ta").focus();
}

//-->
</script>
</HEAD>
<BODY>

<u>PHP ループ計算</u><br>
<nobr>for ($i = 0; $i <= $N; $i ++) { $a[$i]  = 0; }</nobr>

<form name="form1">
<nobr>配列要素数 $N= <input name="ta" id="ta" size=20" type="text" value="" style="width:100px;font-size:16px;">
<input type="button" value="計算開始" onClick="kaisi()" style="margin:1px;margin:0px">
</nobr>
</form>
<hr>
<iframe name="ifr" id="ifr"  width="400" height="150" frameborder="0" style="border:0px"> </iframe>

<body>
</html>
備考
・アプリ・ソース(上記):loopCal.php (0.6KB)、 loopCal_php.html (1.2KB) 、なお数値入力は指数不可
・PHP は、一般にWebサーバ処理の記述用、ここでは自宅おけるPHP対応サーバの環境。
・PHP ver5.2(32bit)  
・サーバ Apache ver2.2(32bit) なお、 IISを用いる方法もある。

Apache の入手
 OSの対応をUnixとWin32とで網羅。インストール方法で2種類、msi タイプは、自動インストールで簡単。
 下記は windows 用での一例
ビット数 ダウンロードファイルと入手先インストール方法生成フォルダ名(変更可)
Win32(32bit)httpd-2.2.22-win32-x86-no_ssl.msi自動Apache Software Foundation
Win64(64bit)httpd-2.4.1-win64.zipコマンドプロンプトApache24

PHPの入手
・PHP 5.3または5.4 (32bit) の ダウンロード入手(2012-11月現在、6〜10月リリース)
・Anindya's PHP 64bit(2012-5月リリース)、 Web検索では評価されていない模様。
Apache の設定
 Network Domain にlocalhost 及び Server Nameにlocalhost と入力する。
 インストール先を「Change...」をクリックして、例えば c:/Apache22 を入力した場合、
 種々設定のファイル(httpd.conf)の場所は、 c:/Apache22/conf/httpd.conf
 その設定ファイルの中身は英語で500行ほどあり、説明コメント(記号#の行)が大部分を占める。
 ・基本的な設定項のドキュメント・ルートは
   ServerRoot "c:/Apache22"
   ServerName localhost
   DocumentRoot "c:/Apache22/htdocs"
   これは、
   DocumentRoot 部のアドレスが、 http://localhost/ であり、例えば、
   c:/Apache22/htdocs/test.html は、アドレス http://localhost/test.html
PHPの設定
 ・PHP対応のApacheの設定(上記に同じくhttpd.confでの設定内容)
   LoadModule php5_module "C:\php\php5apache2_2.dll"
   <IfModule dir_module>DirectoryIndex index.php index.html</IfModule>
   ScriptAlias /php/ "C:/php/"
   <IfModule alias_module>
     Action application/x-httpd-php "C:/php/php-cgi.exe"
     PHPIniDir "C:/php"
     AddType application/x-httpd-php .php
     AddType application/x-httpd-php-source .phps
   </IfModule>
   <IfModule mime_module>
     AddHandler application/x-httpd-php .php
   </IfModule>

 ・PHPのphp.ini(phpのインストールされたフォルダ内にある)の修正・設定
  中身はテキスト文で記述されていて、行頭セミコロン(;)はコメントの意味
   magic_quotes_gpc = Off
   extension_dir = C:/php/extensions/
   extension=php_mbstring.dll
   [mbstring]
    output_handler = mb_output_handler
    mbstring.internal_encoding = EUC-JP
    mbstring.http_input = auto
    mbstring.http_output = SJIS
  なお、mbstringは日本語を使用する為に必要、エンコード出力は、ここではshift-jisに設定。
  (注) コンパイルの場合は出力をutf-8に設定
PHP開発用パッケージ
・上述の PHPコンソール・アプリ のコンパイルを参照。
起動方法
(1)ソース(loopCal.php、loopCal_php.html)をサーバのドキュメント・ルートに置く(例、C:\Apache Software Foundation\htdocs\array)
(2)ブラウザ(IE、FirefoxまたはGoogle Chrome など)で立ち上げる。
(3)ブラウザのアドレスをloopCal_php.htmlのサーバ・パスで入れる (例、http://localhost/array/loopCal_php.html)
・ショートカットで起動する方法
 ショートカットの作成方法: エクスプローラにおいて右クリック新規作成ショートカット→項目の場所に上記のパスを入れる
 
実施結果 計算量Nの最大限度
・N= 2・107 (時間 11 秒、メモリ httpd.exe 1.5GB、32bit) なお、loopCal_php.htmlの立上げブラウザの種類に無関係
・限界超えの通知:
 Fatal error: Out of memory・・・ (tried to allocate 35 bytes) in C:\Apache Software Foundation\htdocs\array\loopCal.php on line 4
 発生箇所:上記の黄色部

H Perl↑ _ 

Perl コード (サーバルート下 コンソール・アプリ)
use strict;
use warnings;
use Time::HiRes;
my $N;
print "\nPerl ループ計算\n"; 
print 'for( my $i = 1; $i <= $N; $i++ ){ $a[$i] = 0; }';

do{
print "\n",'配列要素数 $N の数値を入力してEnter (零入力で終了)',"\nN = ";
chomp( $N =  );  # 標準入力から1行分のデータを受け取り、末尾の改行文字を削除

my $start_time = Time::HiRes::time;  
my @a = ( ) ;
for( my $i = 1; $i <= $N; $i++ ){$a[$i] = 0;}

print '完了 ','$a[',$N,'] = ', "$a[$N]\n";
printf("時間 %0.3f sec\n",Time::HiRes::time - $start_time); #小数点以下を3桁の表示  
}while($N>0);
exit(0);
備考
 ・アプリ・ソース(上記):loopCal.pl (サイズ 0.6KB) 、指数入力可
 ・Active Perl
  perl.exe (var 5.14) 32bit
  perl.exe (var 5.16) 64bit
  なお、var 5.14 と var 5.16 の両共 32bit版 64bit版 あり。ダウンロード入手→ ActiveState社
起動方法
  ・コマンドプロンプトから perl.exe **.pl ( 同じディレクトリでは、C:\Perl\bin\perl.exe loopCal.pl )
  ・エクスプローラで右クリックプログラムから開くPerl Line Interpreter
  ・ショートカットで起動:エクスプローラで右クリック→新規作成ショートカット→項目にコマンドを入力
   例えば C:\Perl\bin\perl.exe "C:\Users\Mori\Documents\loopCal.pl"
 
実施結果 計算量Nの最大限度
 ・32bit(ver 5.14):N= 6・0・107 ( 時間 13秒 メモリ perl.exe 1.2GB(32bit) )
  限界超え通知 なし (エラーで画面リセットされる)
 ・64bit(ver 5.16):N= 6・0・107 ( 時間 12秒 メモリ perl.exe 2.0GB(64bit))、 N= 1.2・108 ( 時間 54.8秒 メモリ perl.exe 3.0GB(64bit)、物理メモリ98&)
  限界超え通知 Out of memory