ホーム » 2020 » 2月

月別アーカイブ: 2月 2020

2020年2月
 1
2345678
9101112131415
16171819202122
23242526272829

カテゴリー

アーカイブ

ブログ統計情報

  • 79,612 アクセス



VirtualBox 6 VHD のサイズの拡大

Win7 の時に作成した VHD のサイズが 64 GB だったのでそれの拡張.
検索すると,探し方が悪いのか面倒な方法ばかり…
それで見つけたのが次の所.
https://blog.goo.ne.jp/ashm314/e/53afcf6f9356646d5556590cab11c013
「メニュー」-「ファイル」-「仮想メディアマネージャー」
VHD を選択,新しいサイズを指定して「適用」
これで VHD の大きさは大きくなるが,仮想マシンを起動すると変わっていない.
ディスクのサイズが増えていない
「ディスクの管理」で見ると「未割り当て」になっている
これに対応するには次の所.
https://www.atmarkit.co.jp/fwin2k/win2ktips/869vhdextend/vhdextend.html

Microsoft DiskPart バージョン 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
コンピューター: VP-HBY

DISKPART> list disk

  ディスク      状態           サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0    オンライン            80 GB    16 GB

DISKPART> list volume

  Volume ###  Ltr Label        Fs    Type        Size     Status     Info
  ----------  --- -----------  ----  ----------  -------  ---------  --------
  Volume 0    D                      CD-ROM          0 B  メディアなし
  Volume 1        システムで予約済み    NTFS  Partition    100 MB  正常       システム
  Volume 2    C                NTFS  Partition     63 GB  正常       ブート

DISKPART> select volume 2

ボリューム 2 が選択されました。

DISKPART> extend

DiskPart はボリュームを正常に拡張しました。

DISKPART> list volume

  Volume ###  Ltr Label        Fs    Type        Size     Status     Info
  ----------  --- -----------  ----  ----------  -------  ---------  --------
  Volume 0    D                      CD-ROM          0 B  メディアなし
  Volume 1        システムで予約済み    NTFS  Partition    100 MB  正常       システム
* Volume 2    C                NTFS  Partition     79 GB  正常       ブート

DISKPART>

diskpart select volume  extend
拡張した部分を認識


2021/01/06
「仮想メディアマネージャー」を使用して,80 GB から 100 GB の拡張で 1 時間程度かかった.
100 GB に拡張して,実際のサイズが 160 GB に
実際のファイルサイズが 160 GB 程度になってしまっている.
diskpart による操作は特に問題ない.


Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Freespire 6 インストール

先日 Twitter で見かけてブックマークしておいたサイト.
https://www.freespirelinux.com/2020/02/freespire-60-released.html
2020/06/22 https://www.freespire.net/
時間が空いたので VirtualBox の環境にインストールしてみた.
ちょっと手順がわかりにくい部分があったのでメモ.


仮想マシンの作成.
仮想マシンの作成
仮想ハードディスクの作成.
仮想ハードディスクの作成
ダウンロードした freespire-6.iso を選択.
freespire-6.iso を選択
仮想マシンの起動.
仮想マシンの起動
起動するとこんな感じ.
Freespire  CD から起動したデスクトップ
デスクトップにある「Install freespire 18.04」を開いてインストール開始.
Freespire インストール
インストーラの起動後,一番下に「日本語」がある.あとは表示に従い操作すれば OK .
Freespire インストールを完了するために再起動


日本語のフォルダが幾つかできているので変更.
LANG=C xdg-user-dirs-gtk-update
フォルダの日本語名を変更


2020/05/06
glut インストール.
sudo apt install freeglut3 freeglut3-dev
Freespire glut インストール

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win10 IIS https 化

テスト環境の IIS を https 化しようと思い,いろいろと…


当然であるが「サイトバインドの追加」で「SSL 証明書」がない.
サイトバインドの追加 SSL 証明書
NAS では Let’s Encrypt を使用しているので調べると win-acme などがあるみたい.
そこから入った https://github.com/win-acme/win-acme/releases/ から落としてやってみたが…


管理者でコマンドプロンプトを起動する必要がある.
wacs 「N」が無効


「N」を選択して進めるがエラー.

C:\Users\Iwao\AppData\Local\Temp<c:\Users\Public\Documents\Tools\win-acme.v2.1.4.710.x64.trimmed\wacs.exe

 A simple Windows ACMEv2 client (WACS)
 Software version 2.1.4.710 (RELEASE, TRIMMED)
 ACME server https://acme-v02.api.letsencrypt.org/
 IIS version 10.0
 Running with administrator credentials
 Scheduled task not configured yet
 Please report issues at https://github.com/PKISharp/win-acme

 N: Create new certificate (simple for IIS)
 M: Create new certificate (full options)
 R: Run scheduled renewals (0 currently due)
 A: Manage renewals (0 total)
 O: More options...
 Q: Quit

 Please choose from the menu: n

 Running in mode: Interactive, Simple
 No sites with host bindings have been configured in IIS. Add one in the IIS Manager or choose the plugin 'Manual input' instead.
 Target plugin IIS aborted or failed

 N: Create new certificate (simple for IIS)
 M: Create new certificate (full options)
 R: Run scheduled renewals (0 currently due)
 A: Manage renewals (0 total)
 O: More options...
 Q: Quit

 Please choose from the menu:


何かの設定が足りないのか?ちょっとわからないので他の方法で…


自己署名証明書でやってみることに.
「IIS 自己署名証明書」で検索
わかりやすかったのがここ.
Windows Server で自己署名 SSL 証明書を作成する手順

IIS マネージャーを使用した証明書の作成
IIS で SSL/TLS を 自己署名入り証明書 で 設定 する方法
「サーバー証明書」-「機能を開く」
「自己署名入り証明書の作成...」
フレンドリ名の指定


「サイトバインドの追加」に「SSL 証明書」が追加されている
LAN 内の他の PC から https で接続
これで https に対応できているかどうかのテストはできるので,今回はここまで.


いつも設定場所を忘れるので…


Microsoft VBScript 実行時エラー エラー ‘800a01ad’
ActiveX コンポーネントはオブジェクトを作成できません。
/_LIB_/L_Mainte.asp, 行 33
Microsoft VBScript 実行時エラー エラー '800a01ad'
「アプリケーション プール」-「詳細設定」-「32 ビット アプリケーションの有効化」を「True」に.
「アプリケーション プール」-「詳細設定」-「32 ビット アプリケーションの有効化」



https://jml.mish.work/index.php/various/iis.html

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

C4244: ‘初期化中’: ‘INT_PTR’ から …

VC 2002 より前に作成した「ダイアログベース」のプロジェクトの場合 x64 対応に変更すると
XxxApp.cpp(73): warning C4244: ‘初期化中’: ‘INT_PTR’ から ‘int’ への変換です。データが失われる可能性があります。

生成されるスケルトンでは,アプリケーションクラスのダイアログの部分が次の様になっている.

	CFBXtoMDlg dlg;
	m_pMainWnd = &dlg;
	int nResponse = dlg.DoModal();
	if (nResponse == IDOK) 	{
	}
	else if (nResponse == IDCANCEL) {
	}

x86,x64 共に warning などを出なくするには,int となっている部分を INT_PTR に変更 する.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

「MFC を使用しない」のエラー

’91 年に C で作成して,’95 年頃に C++ で書き直したコード.
その頃は MFC なしでも動作するようにコードを書いていた.
が,’06 頃の UNICODE 化で MFC に依存するようになってしまっている.
VC6 「プロジェクトの設定」-「MFC を使用しない」
main 関数だけ用意して,対象の cpp をインクルードしてビルドすると,

--------------------構成: t_calc - Win32 Debug--------------------
コンパイル中...
t_calc.cpp
リンク中...
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) はすでに libcpd.lib(delop.obj) で定義されています
nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です
nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です
C:\Temp\Debug\Calc\t_calc\Debug.060/t_calc.exe : fatal error LNK1120: 外部参照 2 が未解決です。
link.exe の実行エラー

t_calc.exe - エラー 4、警告 0

どこかで Afx.h など MFC のコードをインクルードしてしまっている.
インクルードを順に辿るとすぐ見つかるが,どう修正するか悩むところ.
MFC を必要とする場合は今まで通りで,不要な場合は新しいコードに切り替えるか?

#ifdef	 _MFC_VER
#include <Afx.h>
#else
#include "_s_func.hxx"
#endif

ある程度必要なコードは特定できたがまだ書き直してないコードもありそう.


_MFC_VER で切り替えようと思ったが,コンソール AP ではうまく機能しない.
How to detect “Use MFC” in preprocessor
_MFC_VER は Afx.h の中で間接的(AfxVer_.h)に定義されている.
使えるのは _AFXDLL のみ?


次の様な感じ?

#ifdef	 _MSC_VER
#ifdef	 _AFXDLL
#include <Afx.h>
#else
#include <Windows.h>
#endif
#endif

2020/02/14
ヘッダファイルで CString などを使用しているコードの部分は

#ifdef	 _MFC_VER
CString  ChangeString  (LPCTSTR str) ;
#endif

2020/09/25
コンソール AP での define

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

NAS g++ で a.out が作成されない?

warning はあるが,エラーの表示はない状態まで修正して g++ .

Iwao@DS116:~/gcc_test/Test/t_linux/t_calc$ g++ t_calc.cpp -Wall
In file included from /volume1/public/C_Sync/GoogleD/Develop/_.SRC/_gcc/V2_FuncA.hxx:1:0,
                 from Calc_16.cpp:46,
                 from t_calc.cpp:29:
/volume1/public/C_Sync/GoogleD/Develop/_.SRC/__CPR_/v2_funca.hxx: In constructor 'vd2_arc::vd2_arc()':
/volume1/public/C_Sync/GoogleD/Develop/_.SRC/__CPR_/v2_funca.hxx:28:9: warning: 'vd2_arc::tc' will be initialized after [-Wreorder]
  double tc ;
         ^~
/volume1/public/C_Sync/GoogleD/Develop/_.SRC/__CPR_/v2_funca.hxx:27:9: warning:   'double vd2_arc::ts' [-Wreorder]
  double ts ;
         ^~
/volume1/public/C_Sync/GoogleD/Develop/_.SRC/__CPR_/v2_funca.hxx:23:2: warning:   when initialized here [-Wreorder]
  vd2_arc () : lr(0) , tc(0) , ts(0) {}
  ^~~~~~~
/volume1/public/C_Sync/GoogleD/Develop/_.SRC/__CPR_/v2_funca.hxx: In function 'Vd2 get_point_pie(const Vd2&, const Vd2&, double, double)':
/volume1/public/C_Sync/GoogleD/Develop/_.SRC/__CPR_/v2_funca.hxx:263:6: warning: variable 'lm' set but not used [-Wunused-but-set-variable]
  Vd2 lm = (le-ls) / 2 ;
      ^~
In file included from t_calc.cpp:29:0:
Calc_16.cpp: In member function 'virtual int VarCnv::SetError(LPCTSTR, ...)':
Calc_16.cpp:1319:7: warning: variable 'cnt' set but not used [-Wunused-but-set-variable]
  int  cnt ;
       ^~~
Iwao@DS116:~/gcc_test/Test/t_linux/t_calc$ ls
Calc_16.BAK  Calc_16.cpp  Calc_16.hpp  t_calc.BAK  t_calc.cpp  t_calc.dsp
Iwao@DS116:~/gcc_test/Test/t_linux/t_calc$ g++ t_calc.cpp
Iwao@DS116:~/gcc_test/Test/t_linux/t_calc$ ls
Calc_16.BAK  Calc_16.cpp  Calc_16.hpp  t_calc.BAK  t_calc.cpp  t_calc.dsp
Iwao@DS116:~/gcc_test/Test/t_linux/t_calc$ ll
total 248
drwxrwxrwx+  2 Iwao users   4096 Feb  6 11:46 .
drwxrwxrwx+ 16 Iwao users   4096 Feb  6 10:18 ..
-rwxrwxrwx+  1 Iwao users 103036 Feb  6 11:45 Calc_16.BAK
-rwxrwxrwx+  1 Iwao users 103032 Feb  6 11:46 Calc_16.cpp
-rwxrwxrwx+  1 Iwao users  11608 Feb  5 18:53 Calc_16.hpp
-rwxrwxrwx+  1 Iwao users   2756 Feb  6 11:18 t_calc.BAK
-rwxrwxrwx+  1 Iwao users   2420 Feb  6 11:43 t_calc.cpp
-rwxrwxrwx+  1 Iwao users   4420 Feb  5 16:39 t_calc.dsp
Iwao@DS116:~/gcc_test/Test/t_linux/t_calc$ 

なのに a.out が作成されない.
Raspberry Pi で同様に動かすと

pi@raspberrypi:~/projects/t_calc $ g++ t_calc.cpp
In file included from t_calc.cpp:29:
Calc_16.cpp: In function ‘int ExpDel_Bracket1(TCHAR*, size_t, int, int, char)’:
Calc_16.cpp:2152:6: error: ‘_tcspbrk’ was not declared in this scope
  if (_tcspbrk(val,bracket)==NULL){ return FALSE ; } // ���ʂ����݂��Ȃ����͉������Ȃ�
      ^~~~~~~~
Calc_16.cpp:2152:6: note: suggested alternative: ‘wcspbrk’
  if (_tcspbrk(val,bracket)==NULL){ return FALSE ; } // ���ʂ����݂��Ȃ����͉������Ȃ�
      ^~~~~~~~
      wcspbrk
Calc_16.cpp:2161:21: error: ‘_tcsrchr’ was not declared in this scope
  LPTSTR equStartB = _tcsrchr(tmpLeft,startB) ; // �ŏ��� ')' �ɑΉ����� '(' �̈ʒu�����߂�
                     ^~~~~~~~
Calc_16.cpp:2161:21: note: suggested alternative: ‘_tcschr’
  LPTSTR equStartB = _tcsrchr(tmpLeft,startB) ; // �ŏ��� ')' �ɑΉ����� '(' �̈ʒu�����߂�
                     ^~~~~~~~
                     _tcschr
pi@raspberrypi:~/projects/t_calc $ 

どうも ShiftJIS のコメントが邪魔してかエラーが表示されてないだけみたい.
Raspberry Pi でコンパイルするとエラーが表示される
未定義となっているので正しく宣言して対応.


次は warning .

.../v2_funca.hxx:28:9: warning: 'vd2_arc::tc' will be initialized after [-Wreorder]      double tc ;
.../v2_funca.hxx:27:9: warning:   'double vd2_arc::ts' [-Wreorder]                       double ts ;
.../v2_funca.hxx:23:2: warning:   when initialized here [-Wreorder]                      vd2_arc () : lr(0) , tc(0) , ts(0) {}

これは,クラス内の変数の宣言と初期化の順番が異なる場合のものらしい.
もう一つの [-Wunused-but-set-variable] は戻り値を使用していないもの.

warning: variable 'lm' set but not used [-Wunused-but-set-variable]

変数を削除して対応.


前後するが 先日のツール で ShiftJIS のソースを UTF-8 に.

Iwao@DS116:~/gcc_test/Test/t_linux/t_calc$ cd test_sj/
Iwao@DS116:~/gcc_test/Test/t_linux/t_calc/test_sj$ ls
Calc_16.cpp  Calc_16.hpp  t_calc.BAK  t_calc.cpp
Iwao@DS116:~/gcc_test/Test/t_linux/t_calc/test_sj$ g++ t_calc.cpp -Wall
Iwao@DS116:~/gcc_test/Test/t_linux/t_calc/test_sj$ ll
total 132
drwxrwxrwx+ 2 Iwao users   4096 Feb  6 16:39 .
drwxrwxrwx+ 3 Iwao users   4096 Feb  6 16:38 ..
-rwxrwxrwx+ 1 Iwao users 103036 Feb  6 14:41 Calc_16.cpp
-rwxrwxrwx+ 1 Iwao users  11608 Feb  5 18:53 Calc_16.hpp
-rwxrwxrwx+ 1 Iwao users   1821 Feb  6 16:04 t_calc.BAK
-rwxrwxrwx+ 1 Iwao users   1841 Feb  6 16:39 t_calc.cpp
Iwao@DS116:~/gcc_test/Test/t_linux/t_calc/test_sj$ g++ t_calc.cpp -Wall -finput-charset=SJIS
cc1plus: error: conversion from SJIS to UTF-8 not supported by iconv
Iwao@DS116:~/gcc_test/Test/t_linux/t_calc/test_sj$ g++ t_calc.cpp -Wall
In file included from t_calc.cpp:27:0:
Calc_16.cpp: In function 'int ExpDel_Bracket1(TCHAR*, size_t, int, int, char)':
Calc_16.cpp:2152:26: error: '_tcspbrk' was not declared in this scope
  if (_tcspbrk(val,bracket)==NULL){ return FALSE ; } // 括弧が存在しない時は何もしない
                          ^
Iwao@DS116:~/gcc_test/Test/t_linux/t_calc/test_sj$ ll
total 136
drwxrwxrwx+ 3 Iwao users   4096 Feb  6 16:46 .
drwxrwxrwx+ 3 Iwao users   4096 Feb  6 16:38 ..
-rwxrwxrwx+ 1 Iwao users 108716 Feb  6 14:41 Calc_16.cpp
-rwxrwxrwx+ 1 Iwao users  12170 Feb  5 18:53 Calc_16.hpp
drwxrwxrwx+ 2 Iwao users   4096 Feb  6 16:45 org
-rwxrwxrwx+ 1 Iwao users   1841 Feb  6 16:39 t_calc.cpp
Iwao@DS116:~/gcc_test/Test/t_linux/t_calc/test_sj$

エラーが表示される.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VC /LARGEADDRESSAWARE

64 ビットバイナリの作成に関して調べていて /LARGEADDRESSAWARE を見つけたのでメモ.
/LARGEADDRESSAWARE (大きいアドレスの処理)
これを有効にすると 64 ビット環境で 2 GB を超えるメモリを利用できるみたい.
プロジェクトの「プロパティ」-「構成プロパティ」-「リンカ」-「システム」-「大きいサイズのアドレス」
「プロパティ」-「構成プロパティ」-「リンカ」-「システム」-「大きいサイズのアドレス」


次の様なコードで動作を確認.

#include	<iostream>
#include	"memstat.hxx"
#include	"gettickc.hxx"

int		_tmain	(int argc, TCHAR* argv[])
{
	u_32	free_M = 0 ;
	{
		MemoryStatus	ms ;
		std::tout << long(ms.GetPhysFree()/1024/1024) << std::endl ;
		free_M = u_32(ms.GetPhysFree ()/1024/1024) ;
		}
	{
		std::vector <void*>	memAry(1024,(void*)NULL) ;
		u_32	index =0 ;
		u_32	allocTotal = 0 ;
		u_32	allocSize = free_M/2 ;
		u_32	ngCount = 0 ;
		for (index=0 ; index<free_M && ngCount<10 ; ) {
			if (allocSize == 0)	{	break ;		}
			void*	pAlloc = calloc(allocSize,1024*1024) ;
			if (pAlloc != NULL) {
				allocTotal += allocSize ;
				}
			else {
				allocSize /= 2 ;
				ngCount++ ;
				continue ;
				}
			MemoryStatus	ms ;
			std::tout  <<  allocSize  <<  _T("\t") << allocTotal << _T("\t") << long(ms.GetPhysFree()/1024/1024) << std::endl ;
			free_M = u_32(ms.GetPhysFree ()/1024/1024) ;
			memAry.at(index) = pAlloc ;
			::Sleep_ms(1000) ;
			index++ ;
			if (ngCount > 100)	{	break ;		}
			}
		for (index=0 ; index<free_M ; index++) {
			void*	pAlloc = memAry.at(index) ;
			free(pAlloc) ;
			}
		}
	return 0;
	}

/LARGEADDRESSAWARE を有効にすることで 4 GB まで確保できている.

Microsoft Windows [Version 10.0.18362.592]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\Iwao>C:\Temp\TestCPP\t_mem\t_m_stat\release.080\T_m_stat.exe
3845
961     961     3844
480     1441    3847
240     1681    3845
120     1801    3845
120     1921    3845
60      1981    3837
15      1996    3836
7       2003    3830
7       2010    3830
7       2017    3831
3       2020    3826
3       2023    3826

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

C:\Users\Iwao>C:\Temp\TestCPP\t_mem\t_physf\release.080\T_PhysF.exe
3814
1907    1907    3814
953     2860    3801
476     3336    3799
238     3574    3799
119     3693    3800
119     3812    3790
119     3931    3789
59      3990    3788
29      4019    3792
14      4033    3787
14      4047    3787
7       4054    3787
7       4061    3786
3       4064    3778
3       4067    3781
3       4070    3781
3       4073    3781

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

C:\Users\Iwao>

以下は,デバッグ版とリリース版での違い.

C:\Users\Iwao>C:\Temp\TestCPP\t_mem\t_physf\debug.080\T_PhysF.exe
4606
1151    1151    3461
1151    2302    2300
575     2877    1713
575     3452    1188
287     3739    915
143     3882    758
71      3953    671
35      3988    629
17      4005    600
17      4022    582
17      4039    554
8       4047    566
8       4055    554
8       4063    539
4       4067    527

C:\Users\Iwao>C:\Temp\TestCPP\t_mem\t_physf\release.080\T_PhysF.exe
4406
1101    1101    4394
1101    2202    4401
550     2752    4393
550     3302    4403
275     3577    4403
137     3714    4403
68      3782    4403
68      3850    4403
68      3918    4402
34      3952    4502
34      3986    4503
17      4003    4501
17      4020    4502
17      4037    4499
17      4054    4498
8       4062    4499
8       4070    4498
4       4074    4497

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

C:\Users\Iwao>

デバッグ版では空きメモリが減っている


2020/02/05
(VS)\VC\bin\EditBin.exe でも同様の設定ができるみたい.
EDITBIN リファレンス
“C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\editbin.exe/LARGEADDRESSAWARE C:\Users\Iwao\AppData\Local\Temp\i_Tools.tmp\CopyNewF\20200204\T_Phys_L.exe


2020/02/14
確保したメモリのアドレスを表示する様にしてみた.

Microsoft Windows [Version 10.0.18362.657]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\Iwao>\\TestXP\C_Temp\TestCPP\T_mem\T_m_stat\Release.060\T_m_s_2.exe
2030
1015    1015    2030    0000000000878020
507     1522    2030    000000003ff83020
253     1775    2030    000000005fa90020
126     1901    2029    00000000772a7020
63      1964    2029    000000006f7a6020
15      1979    1950    00000000736b7020
15      1994    1947    0000000074f65020
7       2001    1949    0000000075e73020
7       2008    1949    000000007f0b6020
3       2011    1946    0000000074868020
3       2014    2007    0000000074b7d020
3       2017    2009    000000007658e020
3       2020    2010    0000000076890020
3       2023    2011    000000007f7cb020
3       2026    2012    000000007fada020
1       2027    2013    00000000005f2020
1       2028    2013    00000000745c8020
1       2029    2013    0000000076e05020
1       2030    2013    0000000076f14020

abnormal program termination

C:\Users\Iwao>\\TestXP\C_Temp\TestCPP\T_mem\T_m_stat\Release.060\T_m_s_4.exe
1935
967     967     1935    000000000087a020
967     1934    1996    000000007fff7020
967     2901    1996    ffffffffbc70c020
483     3384    1995    000000003cf8e020
241     3625    1996    000000005b293020
120     3745    1997    000000006a3a8020
120     3865    1994    00000000772aa020
60      3925    1996    fffffffff8e1d020
30      3955    1996    0000000071bbc020
30      3985    1996    fffffffffca2c020
15      4000    1874    0000000074f66020
15      4015    1832    000000007eab8020
15      4030    1996    fffffffffe838020
7       4037    2102    00000000739cd020
7       4044    2139    0000000075e7e020
3       4047    2181    00000000740dc020
3       4050    2254    00000000743ed020
3       4053    2255    0000000074868020
3       4056    2255    0000000074b76020
3       4059    2261    0000000076583020
3       4062    2372    000000007689f020
3       4065    2371    000000007f9c0020
3       4068    2371    000000007fcd5020
3       4071    2371    ffffffffff743020
3       4074    2372    ffffffffffa50020
1       4075    2372    00000000006ec020
1       4076    2296    0000000076e04020
1       4077    2296    0000000076f19020

abnormal program termination

C:\Users\Iwao>

/LARGEADDRESSAWARE を有効にした時の確保したメモリのアドレス

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Linux でのメモリの空き容量の取得

C++ のコードで Linux 環境でのメモリの使用状況 を知りたくなった.
コマンドでは free などがあるが,それと同等のものを取得する関数.

Iwao@DS116:~/gcc_test/Test/t_linux/T_mem/t_mem$ free -h
              total        used        free      shared  buff/cache   available
Mem:           1.0G        695M         29M         49M        281M        162M
Swap:          2.0G        1.0G        1.0G
Iwao@DS116:~/gcc_test/Test/t_linux/T_mem/t_mem$ cat /proc/meminfo
MemTotal:        1030632 kB
MemFree:           16720 kB
Buffers:            9392 kB
Cached:           203592 kB
SwapCached:       227532 kB
Active:           393336 kB
Inactive:         489268 kB
Active(anon):     322836 kB
Inactive(anon):   397436 kB
Active(file):      70500 kB
Inactive(file):    91832 kB
Unevictable:        1408 kB
Mlocked:            1408 kB
SwapTotal:       2097148 kB
SwapFree:        1060108 kB
Dirty:               200 kB
Writeback:             0 kB
AnonPages:        538800 kB
Mapped:            71992 kB
Shmem:             50524 kB
Slab:              89312 kB
SReclaimable:      17608 kB
SUnreclaim:        71704 kB
KernelStack:        4368 kB
PageTables:        14768 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     2612464 kB
Committed_AS:    4943664 kB
VmallocTotal:    1039360 kB
VmallocUsed:        6916 kB
VmallocChunk:     961204 kB
Iwao@DS116:~/gcc_test/Test/t_linux/T_mem/t_mem$ ./a.out
16474112
1055367168
Iwao@DS116:~/gcc_test/Test/t_linux/T_mem/t_mem$ cat main.cpp

#include        <iostream>
#include        <sys/sysinfo.h>

int     main    ()
{
        {
                struct  sysinfo meminfo ;
                ::sysinfo(&meminfo);
                std::cout << meminfo.freeram  << std::endl;
                std::cout << meminfo.totalram << std::endl;
                }
        return 0;
        }

Iwao@DS116:~/gcc_test/Test/t_linux/T_mem/t_mem$

Synology NAS DS116 ::sysinfo
最初 getrusage を見つけたが,マニュアルにある様にこの目的では使えない.値は 0 で返ってくる.
次に見つけたのが sysinfo
Fedora や Raspberry Pi ,Synology NAS で動作することを確認.

-		meminfo	{...}			sysinfo
		uptime		17198		__kernel_long_t
-		loads				__kernel_ulong_t [3]
		[0]		35520		__kernel_ulong_t
		[1]		30240		__kernel_ulong_t
		[2]		26880		__kernel_ulong_t
		totalram	2078154752	__kernel_ulong_t
		freeram 	107687936	__kernel_ulong_t
		sharedram	19849216	__kernel_ulong_t
		bufferram	145534976	__kernel_ulong_t
		totalswap	2227171328	__kernel_ulong_t
		freeswap	2206625792	__kernel_ulong_t
		procs   	468		__u16
		pad     	0		__u16
		totalhigh	0		__kernel_ulong_t
		freehigh	0		__kernel_ulong_t
		mem_unit	1		__u32
		_f				char [0]

memstat.hxx

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.