精华内容
下载资源
问答
  • 内存地址存储内存空间

    千次阅读 2018-05-13 11:56:37
    1.内存地址用4位16进制和8位16进制表示的区别。例如经常可以看到某些书籍上写的内存地址0x0001,在另外一些书籍上写的内存地址又变成了0x00000001。都是表示的编号为1的内存地址,为什么一个是4位16进制表示,另外一...

    1.内存地址用4位16进制和8位16进制表示的区别。例如经常可以看到某些书籍上写的内存地址0x0001,在另外一些书籍上写的内存地址又变成了0x00000001。都是表示的编号为1的内存地址,为什么一个是4位16进制表示,另外一个又是用8位16进制表示呢?

    首先,必须要知道内存地址只是一个编号,代表一个内存空间。那么这个空间是多大呢?原来在计算机中存储器的容量是以字节为基本单位的。也就是说一个内存地址代表一个字节(8bit)的存储空间。

    例如经常说32位的操作系统最多支持4GB的内存空间,也就是说CPU只能寻址2的32次方(4GB),注意这里的4GB是以Byte为单位的,不是bit。也就是说有4G=4*1024M(Byte)=4*1024*1024Kb(Byte)=4*1024*1024*1024bit(Byte),即2的32次方个8bit单位。

    所以说用4位16进制表示的内存地址和用8位16进制表示的内存地址,其实都是代表一个8bit的存储空间而已:

    image

    image

    至于说为什么会出现一种是用4位十六进制表示内存地址,另一种用8位十六进制表示内存地址,那是根据不同的硬件环境来的。个人理解:有些CPU只能寻址16位(16根地址线),所以用4位十六进制表示地址就够用了。有些CPU只能寻址32位(32根地址线),所以用8位十六进制。

    另外记住, 210 = 1024

                 1G  = 1024 M

                 1M  =  1024 Kb

                 1Kb = 1024 bit

    2.理解内存。

    程序和数据平常存储在硬盘等存储器上,不管你开机或关机了,它们都是存在的,不会丢失。硬盘可以存储的东西很多,但其传输数据的速度较慢。所以需要运行程序或打开数据时,这些数据必须从硬盘等存储器上先传到另一种容量小但速度快得多的存储器,之后才送入CPU进行执行处理。这中间的存储器就是内存。

    无论何种存储器,软盘、硬盘、光盘或者内存,都有地址。因为它们要存储数据,所以就必须按一定的单位的数据分配一个地址。有了地址,程序才能找到这些数据。这很好理解,想想你们家为什么要有门牌号即可。

    学习编程,必须对内存的地址有一个透彻的理解。我们编程中的每一行代码,代码中用到的每个数据,都需要在内存上有其映射地址。当然,我们并不需要掌握内存是如何进行编址,那是计算机系中的另外一门课:操作系统的事了。

    内存地址:
    计算机把所有的信息都给数字化了,所以它知道自已把一个数据,一条命令记到了内存中的哪个(些)位置。
    看下面的例子:
    如果让计算机在内存里记住“丁小明”这个名字,可以示意为:

    image

    在第一行中,每一格表示一段内存,而格子里的内容是这段内容记下的数据;第二行中每一格内数字就是对应的内存的地址。
    可能有人会啄磨:为什么一个“丁”字(“小”“明”两字也一样)占用两个内存地址呢?这是因为汉字在一个地址(位置)里呆不下,必须放在连续的两个地址空间内。那么,什么东西可以放在单独的一个内存地址里呢?像英文的里字母,比如’A’, 像阿拉伯数字:比如’1’,可以,而且就是放在一个内存地址里。假设有一字符串“ABC”,被记在内存里,可示意为(这次我们假设从内存地址2000H处记起):

    image

    现在我们提几个问题:

    计算机记住”丁”字的内存地址是多少? 答案是:1000H。请见上图

    我们一直在说,在计算机中,所有信息都被数字化为2进制的0、1,所以,“丁小明”这个名字被也应该是一串:0001 0010 0111 0101……,可是在中图所画出的,计算机内存里记的,仍是“丁小明”三个字啊。

    下面是解释,我们只举一个字”丁”讲解。我们假设在那一串里的 0001 0010 0111 0101 对应的是 “丁” 字,那么有:

    image

    让我们把字母’A’对应的图也画出来:

    image

    在上面的两个图中:

    第一行分别是“丁”和“A”,它是给人看的。

    第二行则是一串的的0和1,这才是计算机内存中实际存储的数据。

    第三行是内存的地址。并不是每个0和1所占的位置都被编上地址。而是每8个才拥有一个地址。

    关于第三行,你可以这样理解,门牌号是一个家庭分配一个,每家每户内还有客厅卧室,这些就没有地址了。

    可见:

    ‘丁’的确是由一串0、1组成的。更确切地,从图上可以看出‘丁’是由16位0和1组成。这16数都存放在2个内存地址里。

    ‘A’也一样,它是由8位0、1组成的。占1个内存地址。

    总结:内存地址是内存当中存储数据的一个标识,并不是数据本身,通过内存地址可以找到内存当中存储的数据。

    展开全文
  • *所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是...

    所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。
    例如我们定义一个float型数组:float score[100];   
    但是,在使用数组的时候,总有一个问题困扰着我们:数组应该有多大?在很多的情况下,你并不能确定要使用多大的数组,比如上例,你可能并不知道我们要定义的这个数组到底有多大,那么你就要把数组定义得足够大。这样,你的程序在运行时就申请了固定大小的你认为足够大的内存空间。即使你知道你想利用的空间大小,但是如果因为某种特殊原因空间利用的大小有增加或者减少,你又必须重新去修改程序,扩大数组的存储范围。这种分配固定大小的内存分配方法称之为静态内存分配。但是这种内存分配的方法存在比较严重的缺陷,特别是处理某些问题时:在大多数情况下会浪费大量的内存空间,在少数情况下,当你定义的数组不够大时,可能引起下标越界错误,甚至导致严重后果。

    我们用动态内存分配就可以解决上面的问题. 所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。从以上动、静态内存分配比较可以知道动态内存分配相对于静态内存分配的特点:
       1、不需要预先分配存储空间;
       2、分配的空间可以根据程序的需要扩大或缩小。
    要实现根据程序的需要动态分配存储空间,就必须用到malloc函数.

    malloc函数的原型为:void *malloc (unsigned int size) 其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。还有一点必须注意的是,当函数未能成功分配存储空间(如内存不足)就会返回一个NULL指针。所以在调用该函数时应该检测返回值是否为NULL并执行相应的操作。

    展开全文
  • Android 内存可用空间/总空间大小获取 public class memInfo { // 获得可用的内存 public static long getMemUnused(Context mContext) { long memUnused; // 得到ActivityManager ActivityManager ...

    Android 内存可用空间/总空间大小获取

    import android.app.ActivityManager;
    ... 
    
    public class memInfo {
        // 获得可用的内存
        public static long getMemUnused(Context mContext) {
            long memUnused;
    		// 得到ActivityManager
            ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
    		// 创建ActivityManager.MemoryInfo对象
            ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
            activityManager.getMemoryInfo(memInfo);
    
    		// 取得剩余的内存空间 
            memUnused = memInfo.availMem / 1024;
            return memUnused;
        }
    
        // 获得总内存
        public static long getMemTotal() {
            long memTotal;
            // /proc/meminfo读出的内核信息进行解释
            String path = "/proc/meminfo";
            String content = null;
            BufferedReader br = null;
            try {
                br = new BufferedReader(new FileReader(path), 8);
                String line;
                if ((line = br.readLine()) != null) {
                    content = line;
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            // beginIndex
            int begin = content.indexOf(':');
            // endIndex
            int end = content.indexOf('k');
            // 截取字符串信息
    		content = content.substring(begin + 1, end).trim();
            mTotal = Integer.parseInt(content);
            return mTotal;
        }
    }
    

    参考:
    https://www.cnblogs.com/lee0oo0/archive/2012/11/23/2784642.html
    https://blog.csdn.net/zhe_ge_sha_shou/article/details/89399465
    https://www.cnblogs.com/zhangs1986/p/3251171.html
    https://blog.csdn.net/ganfanzhou/article/details/84899757
    https://blog.csdn.net/xu5603/article/details/36873803

    展开全文
  • Linux下共享内存编程(共享存储空间

    万次阅读 多人点赞 2018-07-29 23:44:08
    不要同时对共享存储空间进行写操作,通常,信号量用于同步共享存储访问。 最简单的共享内存的使用流程 ①ftok函数生成键值 ②shmget函数创建共享内存空间 ③shmat函数获取第一个可用共享内存空间的地址 ④shmdt...

    共享存储允许两个或多个进程共享一个给定的存储区,是进程间通信最快的一种方式。

    不要同时对共享存储空间进行写操作,通常,信号量用于同步共享存储访问。

    最简单的共享内存的使用流程

    ①ftok函数生成键值

    ②shmget函数创建共享内存空间

    ③shmat函数获取第一个可用共享内存空间的地址

    ④shmdt函数进行分离(对共享存储段操作结束时的步骤,并不是从系统中删除共享内存和结构)

    ⑤shmctl函数进行删除共享存储空间

    1.ftok函数生成键值

    每一个共享存储段都有一个对应的键值(key)相关联(消息队列、信号量也同样需要)。

    所需头文件:#include<sys/ipc.h>

    函数原型 :key_t ftok(const char *path ,int id);

    path为一个已存在的路径名

    id为0~255之间的一个数值,代表项目ID,自己取

    返回值:成功返回键值(相当于32位的int)。出错返回-1

    例如:key_t key = ftok( “/tmp”, 66);

    2.shmget函数创建共享存储空间并返回一个共享存储标识符

    所需头文件:#include<sys/shm.h>

    函数原型: int shmget(key_t key, size_t size,int flag);

    key为ftok生成的键值

    size为共享内存的长度,以字节为单位

    flag为所需要的操作和权限,可以用来创建一个共享存储空间并返回一个标识符或者获得一个共享标识符。

    flag的值为IPC_CREAT:如果不存在key值的共享存储空间,且权限不为0,则创建共享存储空间,并返回一个共享存储标识符。如果存在,则直接返回共享存储标识符。

    flag的值为 IPC_CREAT | IPC_EXCL:如果不存在key值的共享存储空间,且权限不为0,则创建共享存储空间,并返回一个共享存储标识符。如果存在,则产生错误。

    返回值:成功返回共享存储ID;出错返回-1

    例如:int id = shmget(key,4096,IPC_CREAT|IPC_EXCL|0666);创建一个大小为4096个字节的权限为0666(所有用户可读可写,具体查询linux权限相关内容)的共享存储空间,并返回一个整形共享存储标识符,如果key值已经存在有共享存储空间了,则出错返回-1。

         int id = shmget(key,4096,IPC_CREAT|0666);创建一个大小为4096个字节的权限为0666(所有用户可读可写,具体查询linux权限相关内容)的共享存储空间,并返回一个共享存储标识符,如果key值已经存在有共享存储空间了,则直接返回一个共享存储标识符。

    3.shmat函数获取第一个可用共享内存空间的地址

    所需头文件:#include<sys/shm.h>

    函数原型: void *shmat(int shmid, const void *addr, int flag);

    shmid为shmget生成的共享存储标识符

    addr指定共享内存出现在进程内存地址的什么位置,直接指定为NULL让内核自己决定一个合适的地址位置

    flag为对数据的操作,如果指定为SHM_RDONLY则以只读方式连接此段,其他值为读写方式连接此段。

    翻阅linux下shm.c文件得到#define SHM_RDONLY      010000  /* read-only access */

    返回值:成功返回指向共享存储段的指针;错误返回-1(打印出指针的值为全F)

    例如:char *addr  = shmat(id, NULL, 0);就会返回第一个可用的共享内存地址的指针的值给addr 

    4.shmdt函数进行分离

    当不需要对此共享内存进行操作时候,调用shmdt函数进行分离,不是删除此共享存储空间哟。

    所需头文件:#include<sys/shm.h>

    函数原型: int shmdt(const void *addr);

    addr为shmat函数返回的地址指针

    返回值:成功返回0;错误返回-1

    例如:int ret = shmdt(addr);

    5.shmctl函数对共享内存进行控制

    简单的操作就是删除共享存储空间了,也可以获取和改变共享内存的状态

    所需头文件:#include<sys/shm.h>

    函数原型:int shmctl(int shmid, int cmd, struct shmid_ds *buf);

    shmid就是shmget函数返回的共享存储标识符

    cmd有三个,常用删除共享内存的为IPC_RMID;IPC_STAT:得到共享内存的状态,把共享内存的shmid_ds结构复制到buf中;IPC_SET:改变共享内存的状态,把buf所指的shmid_ds结构中的uid、gid、mode复制到共享内存的shmid_ds结构内。(内核为每个共享存储段维护着一个结构,结构名为shmid_ds,这里就不讲啦,里面存放着共享内存的大小,pid,存放时间等一些参数)

    buf就是结构体shmid_ds

    返回值:成功返回0;错误返回-1

    例如:int ret = shmctl(id, IPC_RMID,NULL);删除id号的共享存储空间

     

    ps:在Linux下,比如你申请24字节大小的共享存储空间,系统还是会默认给你分配一页的大小,但你还是只能使用这一页上24字节的空间。使用getconf PAGE_SIZE 命令就能显示出一页的大小

    使用ipcs -m可以查看当前系统所有的共享内存空间信息

    如果你的程序创建了一个共享内存段,但没有销毁,可以使用命令ipcrm -m shmid命令删除共享内存段,不然程序再运行有可能出错。

    下面用一个代码例子来使用共享内存

    我创建了一个结构体,想让结构体存入共享内存。写了两个程序,service和client,代码基本相同,不同就是service程序的开始创建共享内存。这两个程序是一个死循环,让你选择是存数据还是读数据还是销毁共享内存。代码写的不是很精致,主要是为了练共享内存,见谅哈。

    command.c文件,构造想存入的结构体,和共享内存的操作函数

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<sys/types.h>
    #include<sys/shm.h>
    #include "Command.h"
    int sharememory(int ipc_size,int flag)
    {
    	int id;
    	key_t key=ftok("/tmp",66);
    	if(key < 0)
    	{
    		printf("get key error\n");
    		return -1;
    	}
    	id = shmget(key,ipc_size,flag);
    	if(id < 0)
    	{
    		printf("get id error\n");
    		return -1;
    	}
    	return id;
    }
    
    int create_ipc(int ipc_size)
    {
    	return sharememory(ipc_size,IPC_CREAT|IPC_EXCL|0666);
    }
    int get_ipc(int ipc_size)
    {
    	return sharememory(ipc_size,IPC_CREAT|0666);
    }
    int destroy_sharememory(int id)
    {
    	return shmctl(id,IPC_RMID,NULL);
    }

    command.h文件。好让service和client调用嘛,方便。

    #define NAME_LEN 20
    typedef struct {
    	char name[NAME_LEN];
    	int age;
    }ckx;
    int sharememory(int ipc_size,int flag);
    int create_ipc(int ipc_size);
    int get_ipc(int ipc_size);

    service.c文件。创建共享内存空间啦,读写等

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<sys/shm.h>
    #include<sys/types.h>
    #include<stdlib.h>
    #include "Command.h"
    
    int main()
    {
    	int id=create_ipc(sizeof(ckx));
    	int i=0;
    	ckx *p;
    	if(id < 0)
    	{
    		printf("create sharememory error\n");
    		return 0;
    	}
    	id = 0;
    	while(1)
    	{
    		printf("\n\n1.input data to sharememory\n2.get sharememory data\n\
    3.destroy sharememory\ninput select:");
    		scanf("%d",&i);
    		if(i > 3 |i< 1)
    		{
    			printf("input error\n");
    			continue;
    		}
    		
    		id = get_ipc(sizeof(ckx));
    		if(id < 0)
    		{
    			printf("get sharememory error\n");
    			break;
    		}
    		p = (ckx *)shmat(id,NULL,0);
    		if(p < 0)
    		{
    			printf("get sharememory addr error\n");
    			p = NULL;
    			break;
    		}
    		
    		if(i == 1)
    		{
    			char name[NAME_LEN];
    			int age=0;
    			
    			printf("input name:");
    			fflush(stdin);
    			getchar();
    			gets(name);
    			printf("input age:");
    			scanf("%d",&age);
    			
    			strcpy(p->name,name);
    			p->age = age;
    			printf("write success\n");
    
    			if(shmdt(p) == -1)
    			{
    				printf("shmdt error\n");
    			}
    			id = 0;
    		}
    		if(i ==  2)
    		{
    			printf("name:%s \t age:%d\n",p->name,p->age);
    			if(shmdt(p) == -1)
    			{
    				printf("shmdt error\n");
    				break;
    			}
    			id = 0;
    		}
    		if(i == 3)
    		{
    			if(shmdt(p) == -1)
    			{
    				printf("shmdt error\n");
    				break;
    			}
    			break;
    		}
    	}
    	if(id !=0)
    	{
    		if(destroy_sharememory(id)<0)
    		{
    			printf("destroy error\n");
    		}
    	}
    }
    

    client.c基本上就和service.c代码差不多啦,只是想体现共享内存嘛,service读写和client读写,观察现象,体现共享内存

    #include<stdio.h>
    #include<sys/shm.h>
    #include<stdlib.h>
    #include<string.h>
    #include<sys/types.h>
    #include<stdlib.h>
    #include "Command.h"
    
    int main()
    {
    	int i=0;
    	ckx *p;
    	int id = 0;
    	while(1)
    	{
    		printf("\n\n1.input data to sharememory\n2.get sharememory data\n\
    3.destroy sharememory\ninput select:");
    		scanf("%d",&i);
    		if(i > 3 |i< 1)
    		{
    			printf("input error\n");
    			continue;
    		}
    		
    		id = get_ipc(sizeof(ckx));
    		if(id < 0)
    		{
    			printf("get sharememory error\n");
    			break;
    		}
    		p = (ckx *)shmat(id,NULL,0);
    		if(p < 0)
    		{
    			printf("get sharememory addr error\n");
    			p = NULL;
    			break;
    		}
    		
    		if(i == 1)
    		{
    			char name[NAME_LEN];
    			int age=0;
    			fflush(stdin);
    			getchar();
    			printf("input name:");
    			gets(name);
    			printf("input age:");
    			scanf("%d",&age);
    			
    			strcpy(p->name,name);
    			p->age = age;
    			printf("write success\n");
    
    			if(shmdt(p) == -1)
    			{
    				printf("shmdt error\n");
    			}
    			id = 0;
    		}
    		if(i ==  2)
    		{
    			printf("name:%s \t age:%d\n",p->name,p->age);
    			if(shmdt(p) == -1)
    			{
    				printf("shmdt error\n");
    				break;
    			}
    			id = 0;
    		}
    		if(i == 3)
    		{
    			if(shmdt(p) == -1)
    			{
    				printf("shmdt error\n");
    				break;
    			}
    			break;
    		}
    	}
    	if(id !=0)
    	{
    		if(destroy_sharememory(id)<0)
    		{
    			printf("destroy error\n");
    		}
    	}
    	
    	
    }
    

     

    展开全文
  • 进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。...下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的。 ...
  • 虚拟内存与物理内存的联系与区别

    万次阅读 多人点赞 2018-08-30 11:55:36
    操作系统有虚拟内存与物理内存的概念。在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址。程序能寻址的范围是有限的,这取决于CPU的地址线条数。比如在32位平台下,寻址的范围是2^32也就是4G。并且...
  • Linux虚拟内存与交换空间机制

    千次阅读 2015-12-06 18:37:09
    对于一台x86(32bit)的操作系统来说,假设它有2G的物理内存,物理内存分成以许多个4k为单位大小的页框,这些页框就是存储进程的最小单位: 为了解决系统运行过程中不同进程之间内存的合理分配和利用,防止不同...
  • 关于内存地址与内存空间的理解

    千次阅读 2020-04-07 16:01:32
    也就是说一个内存地址代表一个字节(8bit)的存储空间。 例如,32位的CPU理论最多支持4GB的内存空间,CPU只能寻址2的32次方(4GB). 区分: 4位16进制表示的内存地址和用8位16进制表示的内存地址,其实都是代表一个8bit...
  • 电脑内存和磁盘空间有什么区别与联系、、、 ------------------- 很多购买电脑的同学仍然还不清楚内存和硬盘到底有什么区别,在电脑里面有什么作用,容易把内存当硬盘或把硬盘当内存,===========================...
  • 1)线性地址空间:是指Linux系统中从0x00000000到0xFFFFFFFF整个4GB虚拟存储空间。   2)内核空间:内核空间表示运行在处理器最高级别的超级用户模式(supervisor mode)下的代码或数据,内核空间占用从0xC0000000...
  • 虚拟内存是虚拟的,是操作系统为了合理使用内存而提出的一种到物理内存的动态映射,系统访问一个内存的时候,首先根据虚拟内存地址,通过映射表转换去找到对应的真正的物理内存上的存储位置,然后读取数据,合理利用...
  • -- 硬盘(虚拟内存)(掉电不丢失) 操作系统在内存管理方面需要重点完成的目标: 抽象:逻辑地址空间 保护:独立地址空间 共享:访问相同内存 虚拟化:获得更多的地址空间 物理地址空间: 硬件支持的地址空间,...
  • 物理内存与虚拟内存的关系:当运行程序过多,物理内存不够用时,系统会将一部分硬盘空间内存使用,这部分空间就是虚拟内存。   虚拟地址空间(作用:解决物理内存稀缺问题):系统为每个进程所分配的4GB虚拟...
  • 内存地址空间与分配

    千次阅读 2017-11-01 16:25:55
    在32计算机中,它的最大内存容量是2^32次方(4个GB大小)。它是由无符号整形从0~4GB顺序构成。0地址对应一个存储单元(8bit),1地址也对应一个存储单元(8bit),以此类推。如果一个数据对应的地址是0~3地址,那么它...
  • 堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈...
  • 物理内存与虚拟内存 内存是计算机每部的一些存储器,用于保存cpu运算的中间数据和计算结果。 所谓物理内存就是RAM(Random Access Memory随机存储器),具有高速存取、读写时间相等,如计算机内存,在计算机中还有一...
  • 1. 内存空间的分配回收 2. 内存空间的扩充:利用操作系统的虚拟性 早期的计算机内存很小,比如IBM推出的第一台PC机最大只支持1MB大小的内存。因此经常会出现内存大小不够的情况。 后来人们引入了覆盖技术,用来...
  • 虚拟内存和交换空间

    千次阅读 2018-02-23 11:47:03
    虚存是对物理内存的抽象,虚存使用lru 的机制将物理内存中...虚存是操作系统为了更高效的使用物理内存提出的概念,应用程序操作的地址是虚存的地址(对应地址空间的概念),内核提供将虚存地址翻译为物理内存地址的功...
  • 将外部存储空间的一部分用来存放内存中暂时不用的东西,就好像它是内存一样,要的时候再把它调进内存,也就是所谓的虚拟了;桌面版windows可以设置这块虚拟内存的位置(位于哪个盘下),及大小,它对应的有一个文件...
  • 内存溢出与内存泄漏区别

    千次阅读 2019-05-17 17:30:17
    内存泄露和内存溢出的区别,内存泄露和内存溢出到底有什么区别啊 1. 内存溢出和内存泄露的区别: 内存溢出的角度不一样的,申请的内存空间,超出了最大的内存空间,这就叫做内存溢出,内存溢出是在申请内存空间的时候, ...
  • ELF存储空间内存的映射关系

    千次阅读 2017-11-18 21:57:22
    bss段:未初始化的全局变量和未初始化的局部静态变量,不占用程序文件的存储空间,程序启动后分配 #include int bss_data[1024 * 1024]; int main() { return 0; } gcc test.c -o bss du -sh bss 12K bssdata...
  • 进程虚拟内存空间

    千次阅读 2017-04-13 22:02:23
    简介进程程序程序是一个静态的概念,它就是一些预先编译好的指令和数据集合的一个文件,一般程序都存储在硬盘当中。进程则是正在运行的程序的实例,是一个动态的概念,它描述了程序在运行时的各种状态,往往被加载...
  • PCIe的内存地址空间、I/O地址空间和配置地址空间

    千次阅读 多人点赞 2018-08-12 18:07:14
    pci设备其它接口的设备(如i2c设备)最大的不同是存在内存地址空间和配置地址空间,本文分析一下它们的用途。 首先区分一下IO空间内存空间 cpu会访问的设备一般有内存和外设寄存器,如下图所示。x86架构采用...
  • 堆栈动态分配内存空间

    千次阅读 2017-11-04 14:30:55
    C/C++的动态分配内存空间
  • iOS 的内存与存储区域

    千次阅读 2017-06-13 16:18:32
    栈区(stack)概述:栈是向低地址扩展的数据结构,是一块连续的内存区域。由栈顶的地址和栈的最大容量是系统预先规定好的。栈的空间很小,大概1-2M...特别注意:系统栈的剩余空间 大于 所申请的空间,系统为程序提供内存
  • 物理内存与虚拟内存的关系:当运行程序过多,物理内存不够用时,系统会将一部分硬盘空间内存使用,这部分空间就是虚拟内存 虚拟地址空间(作用:解决物理内存稀缺问题):系统为每个进程所分配的4GB虚拟地址空
  • armpowerpc两种处理器跟x86不同,armpowerpc一样,它们的外设I/O端口是统一编址的,即物理内存等外设统一编址在4GB的地址空间中(32为处理器)。而x86是将内存单独编址在一个地址空间,外设I/O端口在另外的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 996,603
精华内容 398,641
关键字:

内存与储存空间的区别