OpenSees Blog 日本語 目次

最初に「このブログをみるためのガイド」をご覧ください。

Update中OpenSees コマンド 日本語解説 の 目次 OpenSeesコマンド はじめての方は「ここから
このblogで使用しているOpenSeesコマンド集は「ここ」 Update中
OpenSees のソースコード 解析に挑戦してみる 目次最初のページは「ソースコードのダウンロードとビルド」
Appendix:C言語での 「有限要素法における平面トラスの解析」目次最初のページは「Microsoft Visual Studioの導入方法」







目次の中で、更新したページにはNewがついています

このブログ内の単語を検索したい場合は、左上OpenSeesロゴの上に検索窓から検索できます。


2015年1月20日火曜日

C言語での特徴 - memory handling

 C言語での特徴 1) memory handling について

Cの大きな特徴として、ポインタによるメモリハンドルが可能ということがあります




簡単のため 1列のDimensionでのメモリのallocate, freeについて解説します。
下記は5の大きさを持った1列のDimensionでのCプログラムでです。

#include <malloc.h>
#include <stdlib.h>

double  *double_dimension_sample;
int      dimension_size = 5;

double_dimension_sample = (double *)malloc(sizeof(double) * dimension_size);

double_dimension_sample[0] = 1.0;
for (int i = 0; i < dimension_size; i++)
double_dimension_sample[i] = double_dimension_sample[i-1] + 0.5;

if (double_dimension_sample)
free(double_dimension_sample);





次に23列を持った行列(Dimension)の場合での、メモリのallocate, freeについて説明します。
2次元の行列の場合のCプログラムは以下の通りです。

#include <malloc.h>
#include <stdlib.h>
#define DIM_ROW 2
#define DIM_COL 3

double **A;

A =  (double **)(malloc (sizeof(double*) * DIM_ROW));
for (int i = 0; i < DIM_ROW; i++)
              A[i] = (double *)malloc(sizeof(double) * DIM_COL);

// omitted…

if (A)      {
for (int i = 0; i < DIM_ROW; i++)   {
                            if (A[i])  free(A[i]);
              }

}





メモリを解放(free)する場合は、この定義の逆の順番で解放すること。

malloc () について詳細に知りたい場合は、下記MSDN(Microsoft Developer Network)で参照できる



なぜメモリ ハンドリンングが必要なのでしょうか? メモリは有限で、アクセススピードがCPUと比べて遅いからです。
















参照) http://www.cms-initiative.jp/ja/events/CMSI_events/2013-haishin-docs/0530-nakata


ちなみにC++言語では、以下のようになります。





次のページ →
 C言語での特徴 - dimension

「有限要素法における平面トラスの解析」プログラムをC言語で書いてみる : 目次

0 件のコメント:

コメントを投稿