精华内容
下载资源
问答
  • android 总内存和可用内存大小显示

    千次阅读 2015-05-25 11:23:37
    private String getAvailMemory() {// 获取android当前可用内存大小 ActivityManager am = (ActivityManager) getActivity().getSystemService( Context.ACTIVITY_SERVICE); MemoryInfo mi = new ...
    private String getAvailMemory() {// 获取android当前可用内存大小
    
    		ActivityManager am = (ActivityManager) getActivity().getSystemService(
    				Context.ACTIVITY_SERVICE);
    		MemoryInfo mi = new MemoryInfo();
    		am.getMemoryInfo(mi);
    		// mi.availMem; 当前系统的可用内存
    
    		return Formatter.formatFileSize(getActivity().getBaseContext(),
    				mi.availMem);// 将获取的内存大小规格化
    	}
    
    	// 获取手机总内存
    	private String getTotalMemory() {
    		String str1 = "/proc/meminfo";// 系统内存信息文件
    		String str2;
    		String[] arrayOfString;
    		long initial_memory = 0;
    
    		try {
    			FileReader localFileReader = new FileReader(str1);
    			BufferedReader localBufferedReader = new BufferedReader(
    					localFileReader, 8192);
    			str2 = localBufferedReader.readLine();// 读取meminfo第一行,系统总内存大小
    
    			arrayOfString = str2.split("\\s+");
    			for (String num : arrayOfString) {
    				Log.i(str2, num + "\t");
    			}
    
    			initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte
    			localBufferedReader.close();
    
    		} catch (IOException e) {
    		}
    		return Formatter.formatFileSize(getActivity().getBaseContext(),
    				initial_memory);// Byte转换为KB或者MB,内存大小规格化
    	}

    展开全文
  • 在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小。 这个该如何实现呢? 通过读取文件“/proc/meminfo”的信息能够获取手机Memory的总量,而通过ActivityManager.get...
  • 获取手机的总内存和可用的内存信息等(这里所值的手机的总内存指的是Ram内存,可用的内存指的是手机可用的rom内存信息)思路:"/proc/meminfo"文件记录了android手机的一些内存信息,在命令行窗口里输入"adb shell...

    获取手机的总内存和可用的内存信息等(这里所值的手机的总内存指的是Ram内存,可用的内存指的是手机可用的rom内存信息)

    思路:

    "/proc/meminfo"文件记录了android手机的一些内存信息,在命令行窗口里输入"adb shell",进入shell环境,输入"cat /proc/meminfo"即可在命令行里显示meminfo文件的内容

    C:\Users\Figo>adb shell# cat /proc/meminfocat /proc/meminfoMemTotal:          94096 kBMemFree:            1684 kBBuffers:              16 kBCached:            27160 kB

    MemTotal: 所有可用RAM大小。

    MemFree: LowFree与HighFree的总和,被系统留着未使用的内存。

    所以要获得手机的内存信息只需读取"/proc/meminfo"文件的第1行,并进行简单的字符串处理即可。


    第二种方法:(利用Android提供的一组内部的API来实现)

    Android系统提供了Environment 和StatFs两个类,配合可以实现对存储设备容量的查看。

    Environment: 获取系统中的存储设备信息

    getDataDirectory(): 获取应用存储空间文件对象。

    getExternalStorageDirectory(): 获取外部存储设备及SD卡文件对象。

    getRootDirectory(): 获取系统空间文件对象。

    StatFs: 用于获取具体文件的信息。

    getBlockCount(): 获取存储块数量。

    getAvailableBlocks(): 获取可用的存储块数量。

    getBlockSize(): 获取存储块大小。

    因为Android是基于Linux系统的,所以其没有盘符的概念,而且是以存储块来存储数据。所以获得容量的正确方式为:

    1. 通过Environment获取需要检测容量的文件对象。

    2. 构建StatFs对象。

    3. 获取存储块数量。

    4. 获取存储块大小。

    5. 计算得出容量大小。

    通过getBlockSize()方法获取出来的值,是以字节做单位。

    package com.luochuang.programView;
    
    import java.io.File;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Environment;
    import android.os.StatFs;
    import android.text.format.Formatter;
    import android.widget.TextView;
    
    public class ProgramViewActivity extends Activity {
    
    	private TextView app_manager_avail_sd;
    	private TextView app_manager_avail_mem;
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.app_manager);
    		app_manager_avail_sd = (TextView) findViewById(R.id.tv_app_manager_avail_sd);
    		app_manager_avail_mem = (TextView) findViewById(R.id.tv_app_manager_avail_mem);
    		app_manager_avail_sd.setText("SD卡可用内存" + getAvailSdSize());
    		app_manager_avail_mem.setText("手机剩余内存:" + getInternalAvailSize());
    	}
    
    	/***
    	 * 获取可用的sd卡的空间
    	 */
    	public String getAvailSdSize() {
    		File path = Environment.getExternalStorageDirectory();
    		// StatFs:检索有关整体上的一个文件系统的空间信息
    		StatFs stat = new StatFs(path.getPath());
    		// 一个文件系统的块大小,以字节为单位。
    		long blockSize = stat.getBlockSize();
    		// SD卡中可用的块数
    		long availableBlocks = stat.getAvailableBlocks();
    		return Formatter.formatFileSize(this, blockSize * blockSize);
    	}
    
    	/**
    	 * 获取手机的内部存储设备的可用空间
    	 */
    	public String getInternalAvailSize() {
    		StatFs mDataFileStats = new StatFs("/data");
    		long freeStorage = (long) mDataFileStats.getAvailableBlocks()
    				* mDataFileStats.getBlockSize();
    		return Formatter.formatFileSize(this, freeStorage);
    	}
    
    }
    遇到的错误:

    07-10 16:53:14.923: E/AndroidRuntime(394): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.luochuang.programView/com.luochuang.programView.ProgramViewActivity}: java.lang.RuntimeException: Binary XML file line #56: You must supply a layout_width attribute.
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.os.Handler.dispatchMessage(Handler.java:99)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.os.Looper.loop(Looper.java:123)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at java.lang.reflect.Method.invokeNative(Native Method)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at java.lang.reflect.Method.invoke(Method.java:521)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at dalvik.system.NativeStart.main(Native Method)
    07-10 16:53:14.923: E/AndroidRuntime(394): Caused by: java.lang.RuntimeException: Binary XML file line #56: You must supply a layout_width attribute.-----------------------------------------------XML文件的56行出现了错误。多了个标签
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:491)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:3592)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.view.ViewGroup$MarginLayoutParams.<init>(ViewGroup.java:3672)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.widget.FrameLayout$LayoutParams.<init>(FrameLayout.java:452)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:418)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:48)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:620)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.app.Activity.setContentView(Activity.java:1647)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at com.luochuang.programView.ProgramViewActivity.onCreate(ProgramViewActivity.java:20)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    07-10 16:53:14.923: E/AndroidRuntime(394):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    07-10 16:53:14.923: E/AndroidRuntime(394):     ... 11 more

    1.首先获取手机内存的两种方法:(ram,断电不可保存数据)

        public String getAvailMemory() {
            MemoryInfo outInfo = new MemoryInfo();
            manager.getMemoryInfo(outInfo);
            return Formatter.formatFileSize(ManagerTestActivity.this,
                    outInfo.availMem);
        }
    
    2.
    	public String getInternalAvailSize() {
    		StatFs mDataFileStats = new StatFs("/data");
    		long freeStorage = (long) mDataFileStats.getAvailableBlocks()
    				* mDataFileStats.getBlockSize();
    		return Formatter.formatFileSize(this, freeStorage);
    	}

    获取sdcard卡的内存空间

    // Sdcard的可用空间
        public String getAvailSdSize() {
            File path = Environment.getExternalStorageDirectory();
            // StatFs:检索有关整体上的一个文件系统的空间信息
            StatFs stat = new StatFs(path.getPath());
            // 一个文件系统的块大小,以字节为单位。
            long blockSize = stat.getBlockSize();
            // SD卡中可用的块数
            long availableBlocks = stat.getAvailableBlocks();
            return Formatter.formatFileSize(this, blockSize * availableBlocks);
        }
    
        // Sdcard的总空间
        public String getALLAvailSdSize() {
            File path = Environment.getExternalStorageDirectory();
            // StatFs:检索有关整体上的一个文件系统的空间信息
            StatFs stat = new StatFs(path.getPath());
            // 一个文件系统的块大小,以字节为单位。
            long blockSize = stat.getBlockCount();
            // SD卡中可用的块数
            long availableBlocks = stat.getAvailableBlocks();
            return Formatter.formatFileSize(this, blockSize * availableBlocks);
        }



    展开全文
  • 内容索引:VB源码,系统相关,内存,进度条,百分比 VB检测系统内存使用率,并使用标签进度条显示内存使用信息,可检测物理内存使用率、虚拟内存使用率,点击“详细信息后”,还可查看物理内存、已使用的物理内存、...
  • 分页管理前求出系统的总内存大小后,就可以根据实际的总内存大小初始化页目录表页表,以便节省页目录表页表占用的空间. 1.首先构建文件pm.inc,初始化了一些需要的属性 DA_LDT EQU 82h;局部描述符表段类型值 DA_...

          忙碌了一阵,总算把分页管理的代码调通了.本节讲述系统内存的查询和显示,为分页管理实践做准备.分页管理前求出系统的总内存大小后,就可以根据实际的总内存大小初始化页目录表和页表,以便节省页目录表和页表占用的空间.

     1.首先构建文件pm.inc,初始化了一些需要的属性

    DA_LDT EQU 82h;局部描述符表段类型值
    DA_32  EQU 4000h ;32位段
    DA_DRW		EQU	92h	; 存在的可读写数据段属性值
    DA_DRWA		EQU	93h	; 存在的已访问可读写数据段类型值
    DA_C  EQU  98h  ;存在的只执行代码段属性
    
    DA_DPL1		EQU	  20h	; DPL = 1
    DA_DPL3		EQU	  30h	; DPL = 3
    
    SA_RPL0         EQU       0h    ;RPL = 0
    SA_RPL1         EQU       1h    ;RPL = 1
    SA_RPL2         EQU       2h    ;RPL = 2
    SA_RPL3         EQU       3h    ;RPL = 3
    
    SA_TIG		EQU	0	; ┓TI
    SA_TIL		EQU	4	; ┛
    
    ;描述符定义,传进来的参数会自动装到对应的字节中
    ;usage:Descriptor Base,Limit,Attr
    %macro Descriptor 3
           dw %2&0FFFFh ;段界限1
           dw %1&0FFFFh ;段基址1
           db (%1>>16)&0FFh ;段基址2
           dw ((%2>>8)&0F00h)|(%3&0F0FFh) ;属性1 + 段界限2 + 属性2
           db (%1>>24)&0FFh ;段基址3
    %endmacro ;共8个字节

    2.构建lib.inc文件,定义一些函数用来显示字符串和数字,为显示内存信息做准备.

    ;;lib.inc
    ;;显示AL中的数字
    DispAL:
      push ecx
      push edx
      push edi
      
      mov edi,[dwDispPos]
    
      mov ah, 0Fh ;0 黑底, F白字
      mov dl, al
      shr al,4 ;先显示高位,再显示低位
      mov ecx,2
    .begin:
      and al,01111b
      cmp al, 9
      ja .1
      add al,'0'
      jmp .2
    .1:
      sub al,0Ah
      add al,'A'
    .2:
      mov [gs:edi],ax
      add edi,2
    
      mov al,dl
      loop .begin
      ;add edi, 2
    
      mov [dwDispPos],edi
    
      pop edi
      pop edx
      pop ecx
    
      ret
    ;; DispAL 结束
    
    ;;显示一个整数
    DispInt:
      mov eax, [esp + 4]
      shr eax,24
      call DispAL
      
      mov eax, [esp + 4]
      shr eax,16
      call DispAL
    
      mov eax, [esp + 4]
      shr eax,8
      call DispAL
    
      mov eax, [esp + 4]
      call DispAL
    
      mov ah,07h
      mov al,'h'
      
      push edi
      mov edi, [dwDispPos]
      mov [gs:edi], ax
      add edi,4
      mov [dwDispPos],edi
      pop edi
    
      ret
    ;;DispInt结束
    
    ;;显示一个字符串
    DispStr:
      push ebp
      mov ebp,esp
      push ebx
      push esi
      push edi
    
      mov esi,[ebp+8] ;加上自己开始压入的ebp,一共压入了两个元素,因此加上8才能找到地址存放位置
      mov edi,[dwDispPos]
      mov ah,0Fh
    
    .1:
      lodsb
      test al, al
      jz .2
      cmp al,0Ah ;是回车吗
      jnz .3
      push eax
      mov eax,edi
      mov bl,160
      div bl
      and eax,0FFh
      inc eax
      mov bl,160
      mul bl
      mov edi,eax
      pop eax
      jmp .1
    .3:
      mov [gs:edi],ax
      add edi,2
      jmp .1
    .2:
      mov [dwDispPos],edi
    
      pop edi
      pop esi
      pop ebx
      pop ebp
      ret
    ;;DispStr结束
    
    ;;换行
    DispReturn:
      push szReturn
      call DispStr  ;printf("\n")
      add esp,4
      ret
    ;;DispReturn 结束

    3.构建pmshowMem.asm文件,用int 15h中断求得系统内存的大小,并显示出来

    %include "pm.inc" ;常量,宏,以及一些说明
    org 0100h
    jmp LABEL_BEGIN
    [SECTION .gdt]
    ; GDT      段基址,  段界限,   段属性
    LABEL_GDT: Descriptor 0, 0, 0 ;空描述符
    LABEL_DESC_NORMAL:   Descriptor 0,         0ffffh, DA_DRW		; Normal 描述符
    LABEL_DESC_CODE32:   Descriptor 0, SegCode32Len-1, DA_C+DA_32		; 非一致代码段, 32
    LABEL_DESC_CODE16:   Descriptor 0,         0ffffh, DA_C			; 非一致代码段, 16
    LABEL_DESC_DATA:     Descriptor 0,      DataLen-1, DA_DRW		; Data
    LABEL_DESC_STACK:    Descriptor 0,     TopOfStack, DA_DRWA + DA_32 ;32位Stack
    LABEL_DESC_VIDEO:    Descriptor 0B8000h,   0ffffh, DA_DRW ;显存首地址
    ;GDT 结束
    
    GdtLen equ $ - LABEL_GDT ;GDT长度
    GdtPtr dw GdtLen - 1 ;GDT界限
           dd 0          ;GDT基地址
    ; GDT选择子
    SelectorNormal		equ	LABEL_DESC_NORMAL	- LABEL_GDT
    SelectorCode32		equ	LABEL_DESC_CODE32	- LABEL_GDT
    SelectorCode16		equ	LABEL_DESC_CODE16	- LABEL_GDT
    SelectorData		equ	LABEL_DESC_DATA		- LABEL_GDT
    SelectorStack		equ	LABEL_DESC_STACK	- LABEL_GDT
    SelectorVideo		equ	LABEL_DESC_VIDEO	- LABEL_GDT
    ;END of SECTION .gdt      
    
    [SECTION .data1]
    ALIGN 32
    [BITS 32]
    LABEL_DATA:
     ;;实模式下使用下面的这些符号
    _szPMMessage: db "In Protect Mode Now. ^_^",0Ah,0Ah,0 ;进入保护模式后显示此字符串
    _szMemChkTitle: db "BaseAddrL  BaseAddrH  LengthLow LengthHigh Type",0Ah,0 ;进入保护模式后显示字符串
    _szRAMSize:  db "RAM size:",0
    _szReturn: db 0Ah,0
    ;变量
    _wSPValueInRealMode dw 0
    _dwMCRNumber: dd 0;Memory Check Result
    _dwDispPos: dd (80*14 + 0)*2
    _dwMemSize dd 0
    _ADRStruct:    ;Address Range Descriptor Structure
      _dwBaseAddrLow: dd 0
      _dwBaseAddrHigh: dd 0
      _dwLengthLow: dd 0
      _dwLengthHigh: dd 0
      _dwType: dd 0
    _MemChkBuf: times 256 db 0
    
    ;保护模式下使用下面的符号
    szPMMessage  equ _szPMMessage - $$
    szMemChkTitle equ _szMemChkTitle - $$
    szRAMSize equ _szRAMSize - $$
    szReturn equ _szReturn - $$
    dwDispPos equ _dwDispPos - $$
    dwMemSize equ _dwMemSize - $$
    dwMCRNumber equ _dwMCRNumber - $$
    ADRStruct equ _ADRStruct - $$
       dwBaseAddrLow equ _dwBaseAddrLow - $$
       dwBaseAddrHigh equ _dwBaseAddrHigh - $$
       dwLengthLow equ _dwLengthLow - $$
       dwLengthHigh equ _dwLengthHigh - $$
       dwType equ _dwType - $$
    MemChkBuf equ _MemChkBuf - $$
    
    DataLen  equ $ - LABEL_DATA
    ;END of [SECTION .data1]
    
    ;全局堆栈段
    [SECTION .gs]
    ALIGN 32
    [BITS 32]
    LABEL_STACK:
      times 512 db 0
    TopOfStack equ $ - LABEL_STACK - 1
    ;END of [SECTION .gs]
    
    [SECTION .s16]
    [BITS 16]
    LABEL_BEGIN:
       mov ax, cs
       mov ds, ax
       mov es, ax
       mov ss, ax
       mov sp,0100h
       
       mov [LABEL_GO_BACK_TO_REAL+3], ax
       mov [_wSPValueInRealMode], sp
       
       ;得到内存数
       mov ebx,0
       mov di, _MemChkBuf
    .loop:
       mov eax,0E820h
       mov ecx,20
       mov edx,0534D4150h
       int 15h
       jc LABEL_MEM_CHK_FAIL
       add di,20
       inc dword [_dwMCRNumber]
       cmp ebx,0
       jne .loop
       jmp LABEL_MEM_CHK_OK
    LABEL_MEM_CHK_FAIL:
       mov dword [_dwMCRNumber], 0
    LABEL_MEM_CHK_OK:
      
       ;初始化16位代码描述符段
       mov	ax, cs
       movzx	eax, ax
       shl	eax, 4
       add	eax, LABEL_SEG_CODE16
       mov	word [LABEL_DESC_CODE16 + 2], ax
       shr	eax, 16
       mov	byte [LABEL_DESC_CODE16 + 4], al
       mov	byte [LABEL_DESC_CODE16 + 7], ah
    
       ; 初始化 32 位代码段描述符
       xor	eax, eax
       mov	ax, cs
       shl	eax, 4
       add	eax, LABEL_SEG_CODE32
       mov	word [LABEL_DESC_CODE32 + 2], ax
       shr	eax, 16
       mov	byte [LABEL_DESC_CODE32 + 4], al
       mov	byte [LABEL_DESC_CODE32 + 7], ah
    
       ; 初始化数据段描述符
       xor	eax, eax
       mov	ax, ds
       shl	eax, 4
       add	eax, LABEL_DATA
       mov	word [LABEL_DESC_DATA + 2], ax
       shr	eax, 16
       mov	byte [LABEL_DESC_DATA + 4], al
       mov	byte [LABEL_DESC_DATA + 7], ah
    
       ; 初始化堆栈段描述符
       xor	eax, eax
       mov	ax, ds
       shl	eax, 4
       add	eax, LABEL_STACK
       mov	word [LABEL_DESC_STACK + 2], ax
       shr	eax, 16
       mov	byte [LABEL_DESC_STACK + 4], al
       mov	byte [LABEL_DESC_STACK + 7], ah
    
       ; 为加载 GDTR 作准备
       xor	eax, eax
       mov	ax, ds
       shl	eax, 4
       add	eax, LABEL_GDT		; eax <- gdt 基地址
       mov	dword [GdtPtr + 2], eax	; [GdtPtr + 2] <- gdt 基地址
    
       ; 加载 GDTR
       lgdt	[GdtPtr]
    
       ; 关中断
       cli
    
       ; 打开地址线A20
       in	al, 92h
       or	al, 00000010b
       out	92h, al
    
       ; 准备切换到保护模式
       mov	eax, cr0
       or	eax, 1
       mov	cr0, eax
    
       ; 真正进入保护模式
       jmp	dword SelectorCode32:0	; 执行这一句会把 SelectorCode32 装入 cs, 并跳转到 Code32Selector:0  处
    
    
    LABEL_REAL_ENTRY:		; 从保护模式跳回到实模式就到了这里
       mov	ax, cs
       mov	ds, ax
       mov	es, ax
       mov	ss, ax
    
       mov	sp, [_wSPValueInRealMode]
    
       in	al, 92h		; ┓
       and	al, 11111101b	; ┣ 关闭 A20 地址线
       out	92h, al		; ┛
    
       sti			; 开中断
    
       mov	ax, 4c00h	; ┓
       int	21h		; ┛回到 DOS
    ; END of [SECTION .s16]  
    
    [SECTION .s32] ;32位代码段,由实模式跳入
    [BITS 32]
    LABEL_SEG_CODE32:
      mov ax, SelectorData
      mov ds, ax   ;数据段选择子
      mov es, ax
      mov ax, SelectorVideo
      mov gs, ax
    
      mov ax, SelectorStack  ;堆栈段选择子
      mov ss, ax
      
      mov esp, TopOfStack 
      push szPMMessage
      call DispStr
      add esp, 4
      
      push szMemChkTitle
      call DispStr
      add esp, 4
      
      call DispMemSize ;显示内存信息
    
      jmp SelectorCode16:0 ;到此停止
      
      %include "lib.inc"  ;引入lib库中的函数
    DispMemSize:
      push esi
      push edi
      push ecx
      
      mov esi,MemChkBuf
      mov ecx,[dwMCRNumber];每次得到一个ARDS,遍历内存结构数组
    
    .loop:
       mov edx,5 ;每次得到ARDS中的一个成员
       mov edi,ADRStruct ;依次显示内存结构体中的成员
    
    .1:
       push dword [esi]
       call DispInt  ;显示一个成员
       pop eax
       stosd  ;ADRStruct[j*4]=MemChkBuf[j*4]
       add esi,4
       dec edx
       cmp edx,0
       jnz  .1
       call DispReturn
       
       cmp dword [dwType],1; 看下内存是否可用
       jne .2
       mov eax,[dwBaseAddrLow]
       add eax,[dwLengthLow]
       cmp eax,[dwMemSize];
       jb  .2
       mov [dwMemSize],eax
    .2:
       loop .loop
       call DispReturn
       push szRAMSize    ;显示内存大小标题
       call DispStr
       add esp,4
       push dword [dwMemSize]
       call DispInt 
       add esp,4
       pop ecx
       pop edi
       pop esi
       ret
    
    SegCode32Len	equ	$ - LABEL_SEG_CODE32
    ; END of [SECTION .s32]
    
    ; 16 位代码段. 由 32 位代码段跳入, 跳出后到实模式
    [SECTION .s16code]
    ALIGN	32
    [BITS	16]
    LABEL_SEG_CODE16:
    	; 跳回实模式:
    	mov	ax, SelectorNormal
    	mov	ds, ax
    	mov	es, ax
    	mov	fs, ax
    	mov	gs, ax
    	mov	ss, ax
    
    	mov	eax, cr0
    	and     eax, 11111110b          ;关闭保护模式
    	mov	cr0, eax
    
    LABEL_GO_BACK_TO_REAL:
    	jmp	0:LABEL_REAL_ENTRY	; 段地址会在程序开始处被设置成正确的值
    
    Code16Len	equ	$ - LABEL_SEG_CODE16
    
    ; END of [SECTION .s16code]

    4.构建MakeFileLDT文件

    ##################################################
    # Makefile of pmtestx.asm (x=[1,2,3...])
    ##################################################
    
    SRC:=pmshowMem.asm
    BIN:=$(subst .asm,.com,$(SRC)) #${SRC}中的.asm会替换成.com
    #此句等价于pmprotect2real.com
    
    .PHONY : everything
    
    everything : $(BIN)
    	sudo mount -o loop pm.img /mnt/floppy/
    	sudo cp $(BIN) /mnt/floppy/ -fv
    	sudo umount /mnt/floppy/
    
    $(BIN) : $(SRC)
    	nasm $< -o $@ 
    

    5.执行make -f MakeFileLDT编译程序,然后调用命令bochs -f bochsrcdos执行程序得到下面的结果

    源码地址:https://github.com/Foolegend/aos/tree/master/chapter03/Page/showMem

    展开全文
  • VB检测系统内存使用率,并使用标签进度条显示内存使用信息,可检测物理内存使用率、虚拟内存使用率,点击“详细信息后”,还可查看物理内存、已使用的物理内存、当前交换文字字节数、当前可用的交换文件字节数,...
  • free 显示 系统中 已用和未用的 物理内存和交换内存, 共享内存和内核使用的 缓冲区的 总和. 选项 (Options) -b 选项 以字节为单位 显示 内存总和; -k 选项 (缺省的) 以 KB 为单位 显示; -...

    总览 (SYNOPSIS)

    free [-b | -k | -m] [-o] [-s delay ] [-t] [-V]

     

    描述 (DESCRIPTION)

    free 显示 系统中 已用和未用的 物理内存和交换内存, 共享内存和内核使用的 缓冲区的 总和.

     

    选项 (Options)

    -b 选项 以字节为单位 显示 内存总和; -k 选项 (缺省的) 以 KB 为单位 显示; -m 选项 以 MB 为单位.

     

    -t 选项 显示 一个 总计行.

     

    -o 选项 禁止 "buffer adjusted" 行的显示. 除非 指定 free 从 (相应的) 已用/未用的 内存 减去/加上 缓冲区内存.

     

    -s 使 freedelay 秒为间隔, 连续抽样显示. delay 可以设置成浮点数, 它用 usleep(3) 做 微秒级 延迟.

     

    -V 显示版本信息. 

    转载于:https://www.cnblogs.com/fanweisheng/p/11082383.html

    展开全文
  • VC 得到Windows内存使用情况并显示百分比图,程序运行后,将显示当前系统内存的使用情况,可显示总物理内存、可用物理内存、可用虚拟内存和虚拟总内存,以百分比进度图的方式显示可用和已用情况,直观简洁,可学习下...
  • 一些命令被广泛使用,例如freeps。其他命令允许以多种方式显示系统的性能统计信息,例如top。在本文中,我们将介绍一些命令来帮助您确定当前占用最多内存资源的用户或进程。以下是一些按进程查看内存使用情况的...
  • iOS开发 - 在状态栏显示FPS,CPU和内存信息

    千次阅读 热门讨论 2016-12-26 23:32:31
    今天在用Instruments分析App的时候,感觉看起来不太直观。到Github上找了找,发现几乎都是只显示FPS的,而且效果也不是我想要的。于是就自己写了个 源码地址 LHPerformanceStatusBar 效果字体颜色会根据阈值进行...
  • BalacMemory是Android手机或平板电脑的小部件,它显示内存有关的信息: 可用和总RAM大小 可用内部闪存大小 如果有SD卡,则可用外部闪存的大小 内容 BalacMemory是完全免费的。 它是用Android Studio ...
  • 要获得jvm相关的内存信息,需要使用到java Runtime类的totalMemory(), maxMemory() 和 freeMemory()三个方法。 import java.text.DecimalFormat... * 显示JVM总内存,JVM最大内存和总空闲内存 */ public void displa
  • #查看buffercache free //free会显示物理内存Mem交换分区swap的使用情况,像总内存、已用内存、缓存、可用内存 //缓存 = Buffer + Cache Buffer Cache 都是数据在内存中的临时存储 Buffer 是缓存区 Cache...
  • 类中的函数(方法)放在另外的...另外,由于类的内存和结构体的都一样,取决与变量的总内存。 所以,类到结构体的类型转换是相当的方便,为了使分析更为清晰, 下面的测试参考了Directx中,D3DXCOLOR类到结构体D...
  • 查看CPU核数和内存

    2018-11-05 10:13:00
    查看CPU核数 top 然后按数字键1 通过虚拟文件系统proc,直接...free命令主要用于显示内存数量 free -h 通过虚拟文件系统proc,直接获取内存信息 head /proc/meminfo 转载于:https://www.cnb...
  • 怎样清楚直观的显示内存占用百分比呢。我们借用sed命令的强大功能可以实现。代码命令如下: --Linux系统 --内存 # free -m | sed -n '2p' | awk '{print &quot;used mem is &quot;$3&quot;M,total ...
  • free 命令显示系统使用空闲的内存情况,包括物理内存、交互区内存(swap)内核缓冲区内存。直接输入free命令,显示如下 (推荐学习:linux运维)free命令默认是显示单位kb,可以采用...一般小于总内存的20%,则判...
  • 一、top命令 top # 实时显示进程状态用户 查看CPU利用率 二、查看总内存的方法: free命令主要用于显示内存数量,如下图中内容所表示 free -h 命令 free -m 命令 ...
  • 以MB为单位显示内存使用情况 # free -h 以GB为单位显示内存使用情况 # free -t 以总和的形式查询内存的使用信息 # free -s 5 周期性的查询内存使用信息,每5秒执行一次命令 解释: Mem:内存的使用...
  • 内存配置

    2015-05-11 11:22:44
    内存设置基本参数 在通过QEMU命令行启动客户机时设置内存大小的参数如下:-m megs #设置客户机的内存为megs MB大小默认的...free命令显示总内存是除去了内核执行文件占用内存和一些系统保留的内存之后能使用的内存。
  • 1- CPU:将测试CPU型号,频率,内核数缓存大小2-内存:将显示总内存(RAM)交换量3-系统:将显示服务器正常运行时间4-硬盘速度:将测试硬盘的输入/输出速度,并显示总可用磁盘空间。 5-将通过下载从美国到欧洲再...
  • 内存相关

    2018-08-18 16:49:52
    在linux查看内存用量时肯定要用到free命令,命令的使用简单,而显示结果的需要解释一下:查看系统上的物理内存和swap分区的使用情况,默认单位是字节,-m以M为单位显示tocal大小buffer和cached,缓冲和缓存用池来...
  • linux查看服务器内存

    2021-03-04 17:45:58
    Mem:表示物理内存统计,如果机器剩余内存非常小,一般小于总内存的20%,则判断为系统物理内存不够 Swap: 表示硬盘上交换分区的使用情况,如剩余空间较小,需要留意当前系统内存使用情况及负载,当Swa.
  • 可以按照如下方式进行操作: 一、查看cpu个数方法: ...1、free命令主要用于显示内存数量,如下图中内容所表示。 2、一般使用free命令的-h参数,更人性化的显示,如下图中内容所表示。 ...
  • 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实用,需要的朋友可以参考下 公司的服务器需要实时监控,而且当用户空间已经满了,操作失败,或者...
  • 第一列,total 是总内存大小 第二列,used 是已使用内存的大小,包含了共享内存 第三列,free 是未使用内存的大小 第四列,shared 是共享内存的大小 第五列,buff/cache 是缓存缓冲区的大小 最后一列,...
  • 与其他高级语言不一样,在Java中基本上不会显示地调用分配...1 物理内存就是RAM,还有一个存储单元叫做寄存器,连接处理器RAM或者寄存器的是地址总线,这个地址总线的宽度影响了物理地址的索引范围,32位地址...
  • total列显示系统的可用物理内存和交换空间大小。used列显示已经被使用的物理内存和交换空间。free列显示还有多少物理内存和交换空间可用使用。(真正尚未被使用的物理内存数量)shared列显示被共享使用的物理内...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 740
精华内容 296
关键字:

总内存和显示内存