質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

Q&A

解決済

3回答

2940閲覧

mallocでメモリを確保した際の挙動について

curl

総合スコア19

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

0グッド

0クリップ

投稿2019/03/17 00:57

お世話になります。
linuxのメモリ確保単位について質問があります。

C言語のmallocを利用した下記のプログラムを作成して
psコマンドのメモリ使用量(VSZとRSS)の増え方を見てみました。

質問内容ですが、
1Kサイズのメモリを確保した際にVSZとRSSが増えず、
200Kぐらい確保したら、ようやく増えました。
これは、mallocでメモリのheap領域を確保する際の単位が
1K単位ではなく、200K等の単位で確保するためでしょうか?

もしご存知の方がいらっしゃいましたらご回答お願いします。

検証環境:Ubuntu18.04(kernel version:4.15.0-1031-aws)

※検証用プログラム(while文を200回ぐらいループさせたらVSZとRSSが増えました)

#include<stdio.h> #include <stdlib.h> #include <string.h> int main() { int ch; void *mem; const int size = 1024;//1KB puts("pause ... (start ..)"); while (( ch = getchar()) != 'n' ){ puts("pause ... (next .. malloc)"); getchar(); mem = (void*)malloc(size); /* VSZが増加? */ if (!mem) { puts("can't alloc"); return 1; } puts("pause ... (next .. memset)"); getchar(); memset(mem, 1, size); /* RSSが増加? */ puts("pause ... (next .. loop[cancel->n])"); } return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

その通りです。

mallocは今プログラムに割り当て済みのメモリに空きがあればそこから割り当てます。
空きが無くなれば、sbrkというシステムコールを呼び出して、OSに対して追加のメモリを要求します。そのあと、今もらったメモリで足りる限りはmallocを呼び出してもOSから見たメモリは増えません。
ということを繰り返します。

参考:man brk, sbrk

投稿2019/03/17 01:09

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

curl

2019/03/17 03:46

回答ありがとうございます。 sbrk知らなかったので勉強になりました。
guest

0

ベストアンサー

参考情報

  • もっともシンプルなmalloc,freeの実装と理解

https://nodamushi.hatenablog.com/entry/2018/12/11/213258

  • mallocの動作を追いかける(mmap編)

https://qiita.com/kaityo256/items/9e78b507940b2292bf79

投稿2019/03/17 01:32

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

curl

2019/03/17 03:45

回答ありがとうございます。 記載して頂いたリンクがとてもわかりやすく勉強になりました。
katoy

2019/03/17 10:36 編集

"c" malloc で google 検索してヒットしたページから、参考になりそうなものを紹介しました。 他のページも読んで情報の正誤を自分で判断してみることが必要です。 正誤判断がつきかねたら 改めてQA サイトに質問をするとよいと思います。
guest

0

1バイトmallocすれば、1バイト確保する、とお思いでしょうか。
また、1バイトのファイルを作ったら、ディスクの空き容量は1バイト減るだけ、とお思いでしょうか。
実際はそんなことはしません。非効率ですからね。

投稿2019/03/17 01:03

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

curl

2019/03/17 03:47

回答ありがとうございます。 そうですね確かに非効率ですね。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問