[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[plamo:21933] 物理メモリサイズを取得する方法を教えて下さい
-
From:H.Shiozaki
-
Date:Thu, 5 Feb 2004 01:21:46 +0900 (JST)
- Subject: [plamo:21933] 物理メモリサイズを取得する方法を教えて下さい
- From: H.Shiozaki <sios_hs@xxxxxxxxx>
- Date: Thu, 05 Feb 2004 01:21:40 +0900
汐崎と申します。(長文失礼)
下記の様なプログラムで,PCに実装されているRAMの内,
ユーザプログラムから使えるサイズを取得したいのですが,
どうも,RAM領域を越えてしまいます。
64MBを持つPCで,実効しますと。
Linuxでは,SWAP分も加わるような傾向です。(約200MB)
FreeBSDでは,511MBが得られました。
出来れば,使用可能なRAMメモリだけに限定したいのですが,
ご教授頂けますでしょうか?
----以下はプログラムです----(約80行)
/* chk-ram2.c : check_ram_size in MB unit
Compile:
gcc -Wall -o chk-ram2-lx24 chk-ram2.c (linux)
gcc -Wall -o chk-ram2-fb47 chk-ram2.c (FreeBSD)
*/
/* Memo:
1. 1MB: 1024 * 1024 = 1,048,576
2. calloc in FreeBSD. really get ram and clear
... very slow(at 64MB) ... high cost
3. gcc waring:(in FreeBSD)
warning "this file includes <malloc.h>
which is deprecated, use <stdlib.h> instead"
4. tested with 64MB Machine
in Linux:
RAM_size RAM(usable) + SWAP(usable) ?
in FreeBSD ...511MB
it's larger than 64MB + Swap size ??
*/
#include <stdio.h> /* stdin, printf, fflush */
#include <string.h>
#include <ctype.h> /* isdigit, */
#ifdef __linux__
#include <malloc.h>
/* use <stdlib.h> for malloc in FreeBSD */
#endif
#include <stdlib.h> /* exit, atexit, atoi, malloc, getenv, qsort, */
int check_ram_size(int n, int v);
void usage(void)
{
printf("\n Usage: chk-ram ms v\n");
printf("\n ms: expected max. memory_size in MB");
printf("\n v : verbose level 0 to 1 \n");
printf("\n refer results and comment at MEMO in chk-ram2.c ");
exit(1);
}
int main(int argc, char **argv)
{
int i;
int ms, v;
ms=1; v=0;
if(argc==1) usage();
if(argc>1) ms=atoi(argv[1]);
if(argc>2) v =atoi(argv[2]);
printf("\n command_line: ");
for(i=0; i<argc; i++) printf("%s ", argv[i]);
printf("\n chk-ram ms=%d, v=%d", ms, v);
i = check_ram_size(ms, v);
printf("\n check_ram_size (result): %d[MB]\n", i);
return(0);
}
/***************************************/
int check_ram_size(int n, int v)
{
char *p;
int i, f, g;
f=g=0;
for(i=1; i<=n; i++){
g=0;
p = (char *) malloc(1048576 * i);
//p = (char *) calloc(i, 1048576);
/* very slow: high cost in FreeBSD */
if(p) { g=1; free(p); }
if(p==NULL) {f=1; break;}
if(v)printf("\n**chk_ram_size: malloc successed at size %3d[MB]",
i);
}
if(v && f)printf("\n**chk_ram_size: malloc failed at %3d[MB]", i);
//if(p)free(p);
return(i-1);
}
- - -
汐崎:H.Shiozaki
E-Mail: sios_hs(at)ybb.ne.jp
URL: http://www.geocities.jp/sios_hp/
note: (at)部分を'@'に読替えてください。
- Follow-Ups
-
- [plamo:21934] Re: 物理メモリサイズを取得する方法を教えて下さい, Iwasa Dai
- [plamo:21936] Re: 物理メモリサイズを取得する方法を教えて下さい, K.Kodama
[検索ページ]
[メール一覧]
Plamo ML 公開システム