タグ

mallocに関するItisangoのブックマーク (3)

  • 第四回-02 : new/delete によるメモリの動的管理

    ページでは「new/delete によるメモリの動的管理」について解説する。 malloc/free によるメモリの動的管理 (C 言語) new/delete によるメモリ管理に触れる前に、 「第二回-04 : メモリとポインタ」で取り扱った malloc/free による動的メモリ管理の復習をしておこう。 この手法は C 言語で主に用いられるもので、実は C++ で使われることはあまりない。 ここでは new/delete への導入として malloc/free について触れる。 まず、char 型のポインタ *p を定義し、そのポインタの指す先に要素数 SIZE=255 個の char 型の配列を確保することを考えよう。 「第二回-04 : メモリとポインタ」で取り扱ったように、これは なる命令で実現出来る。この際、ヒープ領域というメモリ領域から領域が確保されるのであった。 なお、

    第四回-02 : new/delete によるメモリの動的管理
  • [C] そりゃ実装依存だけれども-ウンコード・マニア

    10年ほど前に関わった案件にて。けっこう嵌りました。malloc の実装依存部分に起因するエンバグ。 HP-UX ってこういう実装なんだ、と… ソースがいろいろ変だったので修正。ちなみに型違いが原因ではありません。はまったのは malloc です。 // データベースからとってきたデータを保存する // dbData は他のところで typedef struct 宣言済みです dbData* buf = (dbData*)malloc(sizeof(dbData) * rowCount); if(buf != null) { int i=0; for(i=0; i<rowCount; i++) { buf[i] = ... // <- なぜかここで Segmentation Faultが…? ... 使い方ヒント: 「これは臭う」という行を見付けたら、各行のをクリックしてマーキングしておき

    Itisango
    Itisango 2012/08/19
    これ、bufの本来の型は何でしょう?それがわからないとすごく気持ちが悪いんですけど。
  • DBサーバ向けLinuxチューニングを考える 〜 メモリオーバーコミット編 : DSAS開発者の部屋

    Cでプログラムを書いていて大量のメモリを確保したくなったとき、大抵は mallocを使うと思いますが、その際には戻り値がNULLかどうかを判断してエラー処理に飛ばすと思います。しかし、Linux のメモリ管理サブシステムには「メモリ・オーバーコミット」という機構があり、実装されているメモリ以上の領域を確保できてしまいます。 #include <stdio.h> #include <stdlib.h> int main() { int i; char *p; for(i=0;i<65536;i++){ p = (char *)malloc(65536); if(0 == (long)p){ break; } } printf("SIZE=%dMB\n",i*65536/1024/1024); return(0); } swapoff したメモリ 1G のマシンでこれを実行するとこんな感じにな

    DBサーバ向けLinuxチューニングを考える 〜 メモリオーバーコミット編 : DSAS開発者の部屋
  • 1