- ベストアンサー
free compiler
Borland C++ Compiler 5.5 無償版による実行ファイルは はワーキングエリアが1MBを越えると実行できません これはコンパイラが16bit版の実行ファイルしかできないからでしょうか? やはりbcc32でコンパイルしたものは32bit版ではなく16bit版なのでしょうか? 32bit版の実行ファイルをこのコンパイラで作ることはできますか? ちなみに以下のプログラムで性能チェックしました 下記のものは動きましたがMAXが65536の場合は駄目でした このとき1MB+αになります #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <complex.h> #define MAX 60000//65536 int main(void) { complex<double> j(0.0,1.0),z; complex<double> q[3],p[MAX]; double a,b,x,y; p[MAX-1]=j; q[0]=1.0-j;q[1]=j;q[2]=1.0+j; printf("please input double number a\n"); scanf("%lf",&a); printf("please input double number b\n"); scanf("%lf",&b); z=a+j*b; printf("abs(%lf+j*%lf)=%lf\n",a,b,abs(z)); printf("size of int is %d.\n",sizeof(int)); printf("size of float is %d.\n",sizeof(float)); printf("size of long is %d.\n",sizeof(long)); printf("size of float is %d.\n",sizeof(float)); printf("size of double is %d.\n",sizeof(double)); cout<<q[0]<<q[1]<<q[2]<<"\n"<<p[MAX-1]<<"\n"; //c++ command getch(); return 0; } よろしくお願いします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>mallocとかcallocは16bit版専用関数ではないですか? >私の古いボーランドコンパイラではそのような注意書きが有るのですが 昔はポインタにも 16bitのポインタ、 large ポインタ(32bit)、hugeポインタ(32bit)などと区別がありましたね。 しかし、最近のコンパイラではそういう区別はなくなりましたね。 つまり、普通にmallocでもOKです。ANSI-Cの規約に準拠しているコンパイラ(普通は準拠している)であれば。 >すごいものを無償配布するとはボーランドは太っ腹ですね でもすでにフリーでgccというもっとすごいコンパイラがありますので(こちらはアセンブラもあるし、マルチプラットフォーム)、有料にしても売れるとはおもえませんね。 むしろ販促活動としてできるだけ多くの人に使ってほしいのだと思います。 >統合開発環境も無用配布してほしいものです これを売りたいがための販促活動ですから無理でしょうねぇ。 (なんだかんだといってもマイクロソフトは強いですから) では。
その他の回答 (2)
- toysmith
- ベストアンサー率37% (570/1525)
単純にスタックサイズを超えるような自動変数を宣言しているように感じます。 コンパイルオプションでスタックサイズを変更できるのではないでしょうか?
普通どのコンパイラでもWindows用だとローカル変数領域には、あまり大きな配列は取れないと思いますよ。 ちなみにこのbcc32コンパイラは市販している製品版とそれほど違いはないようです。 (無償版で発見されたバグと同じものが製品版でもあったりするので) 製品版との違いは統合環境とライブラリが付属していないだけでしょう。基本的には。 普通大きな配列を確保するときには、mallocかnewを使います。 これだと馬鹿でかい配列もOKです。
補足
newで動きました mallocとかcallocは16bit版専用関数ではないですか? 私の古いボーランドコンパイラではそのような注意書きが有るのですが できたプログラムは32bitコンソール版みたいですね すごいものを無償配布するとはボーランドは太っ腹ですね 統合開発環境も無用配布してほしいものです どうもありがとうございました ちなみに動いたプログラムは以下の通りです #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <complex.h> #define MAX 1048576 int main(void) { complex<double> j(0.0,1.0),z; complex<double> q[3]; double a,b,x,y; complex<double> *p=new complex<double>[MAX];//c++command p[MAX-1]=j; q[0]=1.0-j;q[1]=j;q[2]=1.0+j; printf("please input double number a\n"); scanf("%lf",&a); printf("please input double number b\n"); scanf("%lf",&b); z=a+j*b; printf("abs(%lf+j*%lf)=%lf\n",a,b,abs(z)); printf("size of int is %d.\n",sizeof(int)); printf("size of float is %d.\n",sizeof(float)); printf("size of long is %d.\n",sizeof(long)); printf("size of float is %d.\n",sizeof(float)); printf("size of double is %d.\n",sizeof(double)); cout<<q[0]<<q[1]<<q[2]<<"\n"<<p[MAX-1]<<"\n";//c++ command getch(); delete []p;//c++ command return 0; }
お礼
new関数で動きました どうもありがとうございました