2012年11月 8日 (木)夏よりも冬が好き
おはようございます。
コタツを出そうと思ったところ、
実家にコタツ布団を回収されていた事に気が付いた。
本日の当番、プログラマーのT.Mです。
最近、急に寒くなりましたね。
冬っていうのはコタツなど暖房器具で意外と電気やガスを消費するものです。
まぁ夏でもエアコンなど冷房器具で消費するんですけどね。
プログラムで意外と消費するものと言えばメモリです。
例えば、STLでvectorという動的配列があります。
ランダムアクセスが可能で便利なvectorですが"push_back"とか"insert"などの
要素追加を行った際、
内部では必要な要素数より多く、要素のメモリを先に確保しています。
しかも、要素数が増えれば増えるほど確保するメモリが増えていきます。
言語がC++等の場合はメモリ管理はプログラマー自ら管理を行う必要があるので
動的配列を使いすぎたり、大きな構造体で動的配列の要素を追加し過ぎた時は、
環境によって最悪の場合は強制終了なんて事もありえます。
PCの環境ではほぼありえないと思いますが・・・。
一応の対策としては
下記のような"swap"で強制的に切り詰めるか
vectorを使わずにlistを使うようにするとかですかね。
listの場合はランダムアクセスができませんが・・・。
//--------------------------------------------------------------
#include
<iostream>
#include <vector>
#include <list>
using namespace
std;
int main()
{
vector<int> iVector;
list<int>
iList;
for(int i = 0; i < 30;
++i)
{
iVector.push_back(0); // vectorに要素を30個追加
iList.push_back(0); // listに要素を30個追加
}
int
iUsed, iEnsure;
iUsed = iVector.size(); //
使用中の要素は30
iEnsure = iVector.capacity(); // 確保済の要素は42
cout
<< "Used/Ensure" << " : " << iUsed << "/" <<
iEnsure <<
"\n";
vector<int>(iVector).swap(iVector); // 確保済の要素を30に変更
iUsed
= iVector.size(); // 確認の為に出力
iEnsure =
iVector.capacity();
cout << "Used/Ensure" << " : " <<
iUsed << "/" << iEnsure << "\n";
// listの場合、使用中 :
30
cout << "iList_Size = " << iList.size() <<
"\n";
return
0;
}
//--------------------------------------------------------------
環境によって確保する量が変わりますが
私の環境ではこんな感じでした。
メモリ制限がある場合の制作では気を付けるべき内容だと思います。
・・・・・・コタツ布団、どうしよう・・・。
| 固定リンク | コメント (0) | トラックバック (0)
「プログラマー」カテゴリの記事
- 技術交流の業(2019.03.07)
- 福袋争奪戦デビュー(2019.01.31)
- 温泉旅行(2019.01.24)
- ゲーセンの近況(2018.11.29)
- 健康的にプログラミングを続けるためのちょっとした習慣(2018.10.18)
この記事へのコメントは終了しました。








コメント