精华内容
下载资源
问答
  • 我这边是由于我开了时间机器(Time Machine)搞的鬼。 你原来空间不足时,但Time Machine存储的是你的...你在关于存储空间中显示的不是真实值,用df -h查看才是真实的。 只要运行 sudo tmutil listlocalsnapshots...

    我这边是由于我开了时间机器(Time Machine)搞的鬼。

    你原来空间不足时,但Time Machine存储的是你的“过去”

    你只禁用掉Time Machine,再删除Time Machine时间点就可以了,另外可以运行电脑一两天,也有可能就好了。

    你在关于存储空间中显示的不是真实值,用df -h查看才是真实的。

    只要运行

    sudo tmutil listlocalsnapshots /

    查看有还存储了那些Time Machine,再用下面的命令删除掉就可以了。

    tmutil deletelocalsnapshots 2019-09-24-215658

     

    展开全文
  • C程序设计(第四版) 谭浩强 习题8.19(1) 个人设计习题 8.19(1) 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。...

    C程序设计(第四版) 谭浩强 习题8.19(1) 个人设计

    习题 8.19(1) 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。

    代码块:

    方法1:

    #include <stdio.h>
    #include <stdlib.h>
    
    char *news(char *s[], int n);
    
    int main()
    {
    	char *str[10], **p;
    	int i;
    	printf("Please enter array number: ");
    	scanf("%d", &i);
    	*str=news(str, i);
    	for (p=str, printf("Please enter %d strings: ", i); p<str+i; scanf("%s", *p++));
    	for (p=str, printf("Result: "); p<str+i; printf("%s ", *p++));
    	printf("\n");
    	system("pause");
    	return 0;
    }
    char *news(char *s[], int n)
    {
    	for (int i=0; i<n; s[i++]=(char *)malloc(20*sizeof(char)));
    	return *s;
    }
    

    方法2:

    #include <stdio.h>
    #include <stdlib.h>
    
    char *neww(int n);
    
    int main()
    {
        int num;
        char *n;
        printf("Please enter number: ");
        scanf("%d", &num);
        n=neww(num);
        printf("Address=%d\n", *n);
        system("pause");
        return 0;
    }
    char *neww(int n)
    {
        char *p;
        p=(char *)malloc(n*sizeof(char));
        return p;
    }
    
    展开全文
  • new 函数的作用是分配n个连续字符的存储空间。为此,开辟一个足够大的连续空间。设置字符数组newbuf[1000],new在此范围内操作。指针变量newp开始指向存储区的首字节。每当开辟n个字符存储区,要先检查newbuf数组...

    new 函数的作用是分配n个连续字符的存储空间。为此,开辟一个足够大的连续空间。设置字符数组newbuf[1000],new在此范围内操作。指针变量newp开始指向存储区的首字节。每当开辟n个字符存储区,要先检查newbuf数组是否还有足够的空间。若有,则newp指向开辟区的末尾,并返回下次可用空间的开始的地址。若空间不够,返回NULL。

    #include<stdio.h>
    #define NEWSIZE 1000//指定开辟存储区的最大容量
    char newbuf[NEWSIZE];//定义字符数组
    char *newp=newbuf;//定义指针变量newp,指向可存储区的始端
    char *new(int n)//定义开辟存储区的函数new,开辟存储区后返回指针
    {
    if(newp+n<=newbuf+NEWSIZE)//开辟区未超过newbuf数组的大小
    {
    newp+=n;//指向存储区的末尾
    return newp-n;返回存储区的开始
    }
    else
    return NULL;//空间不够时,返回空指针
    } 



    展开全文
  • 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");
    		}
    	}
    	
    	
    }
    

     

    展开全文
  • 连续存储空间和非连续存储空间

    千次阅读 2018-10-20 16:48:24
    DOS时代的内存管理是粗放的,同时其基本特点是:连续存储空间分配。物理上的空间连续性是内存定位所必须的。 详细的说,内存空间有所谓的逻辑空间和物理空间之分。   (1)当编写一段程序的时候,...
  • 内存地址存储内存空间

    千次阅读 2018-05-13 11:56:37
    关于内存地址和内存空间的理解。1.内存地址用4位16进制和8位16进制表示的区别。例如经常可以看到某些书籍上写的内存地址0x0001,在另外一些书籍上写的内存地址又变成了0x00000001。都是表示的编号为1的内存地址,为...
  • 进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。...下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的。 ...
  • 1)线性地址空间:是指Linux系统中从0x00000000到0xFFFFFFFF整个4GB虚拟存储空间。   2)内核空间:内核空间表示运行在处理器最高级别的超级用户模式(supervisor mode)下的代码或数据,内核空间占用从0xC0000000...
  • 关于内存地址与内存空间的理解

    千次阅读 2020-04-07 16:01:32
    也就是说一个内存地址代表一个字节(8bit)的存储空间。 例如,32位的CPU理论最多支持4GB的内存空间,CPU只能寻址2的32次方(4GB). 区分: 4位16进制表示的内存地址和用8位16进制表示的内存地址,其实都是代表一个8bit...
  • c++对象的存储空间

    2019-04-26 14:07:00
    c++对象的存储空间 1. 非静态成员 2. 静态成员变量 静态成员变量不占对象的内存空间 3. 成员函数 成员函数不占内存空间 4. 析构函数 5. 类中有虚析构函数 6. 继承空类和多重...
  • 1、在该实验中,采用可变分区方式完成对存储空间的管理(即存储空间的分配与回收工作)。 2、设计用来记录主存使用情况的数据结构:已分区表和空闲分区表。 3、在设计好的数据结构上设计一个主存分配算法,要求实现...
  • 11.存储空间优化

    2017-08-18 17:00:04
    优化Redis的存储空间 Redis是一个基于内存的数据库,所有的数据都存储在内存中,所以优化存储、减少内存空间占用对成本控制来说非常重要。 1.精简键名和键值; 2.内部编码优化:Redis为每种数据类型提供了...
  • 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...
  • C语言 结构体存储空间分配

    千次阅读 2017-11-16 11:08:41
    首先详细的给出结构体内存存储空间分配的原则吧:编译器按照成员列表顺序一个接一个地给每个成员分配内存。只有当存储成员时需要满足正确的边界对齐要求时,成员之间才可能出现用于填充的额外内存空间。而且还有3
  • Android 内存可用空间/总空间大小获取 public class memInfo { // 获得可用的内存 public static long getMemUnused(Context mContext) { long memUnused; // 得到ActivityManager ActivityManager ...
  • -- 硬盘(虚拟内存)(掉电不丢失) 操作系统在内存管理方面需要重点完成的目标: 抽象:逻辑地址空间 保护:独立地址空间 共享:访问相同内存 虚拟化:获得更多的地址空间 物理地址空间: 硬件支持的地址空间,...
  • JAVA获取JVM内存空间和物理内存空间

    万次阅读 2018-06-28 11:32:08
    获取JVM内存空间系统环境:WINJDK版本:1.8re直接调用Runtime中相应的方法即可:public long maxMemory() Returns the maximum amount of memory that the Java virtual machine will attempt to use. If there is...
  • PCIe to AXI Translation——PCIe 内存空间到AXI内存空间的转换UltraScale系列芯片包含PCIe的Gen3 Integrated Block IP核在内的多种不同功能的IP核都会有一页设置为PCIe:BARs,设置IP核的Base address register 的...
  • C++内存空间

    千次阅读 2017-10-27 19:53:37
    C++内存空间一个C++程序编译后占用的内存分为如下几个部分: 栈:由编译器自动分配释放,存放函数的参数值,局部变量的值。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。 堆:...
  • C语言用于存储空间动态分配的函数

    千次阅读 2019-04-03 14:44:47
    Linux操作系统提供 了三个用于存储空间(进程的堆空间)动态分配的函数和一个用于释放内存空间的函数。 malloc函数:给进程分配指定字节数的存储区,此存储中的初始值不为0,因此申请后要记得初始化一下。 calloc...
  • linux虚拟内存空间布局

    千次阅读 2014-01-15 09:29:13
    1)线性地址空间:是指Linux系统中从0x00000000到0xFFFFFFFF整个4GB虚拟存储空间。   2)内核空间:内核空间表示运行在处理器最高级别的超级用户模式(supervisormode)下的代码或数据,内核空间占用从0xC0000000...
  • 线性表的顺序存储结构 线性表的物理存储结构分为:顺序存储结构 和 链式存储结构。 物理上的存储方式事实上就是在内存中找个初始地址,然后通过占位的形式,把一定的内存空间给占了,...1、存储空间的起始位置。  2
  • 对于全局对象,其在程序启动时在静态存储区分配内存空间,在程序结束时销毁内存空间。对于局部static对象在第一次使用前分配内存空间,在程序销毁时释放内存空间。 除了自动和static对象外,C++还支持动态内存分配...
  • 数据结构占用存储空间——struct

    千次阅读 2017-03-06 15:46:16
    Struct结构体的内存空间占用结构体字节对齐在计算机中,数据存储和传输通常是以bit为单位,8个bit组成...在32位系统中,遵循4字节对齐,按4个字节为单位分配存储空间,如果不足,会自动补充,如果剩余的空间不足以存放
  • stm32/Cortex-M3的内存的4GB的存储空间

    千次阅读 2016-11-01 20:33:47
    Cortex-M3最大支持4GB的存储空间,但在实际的不同STM32不一样; 在0xE0000000到0xFFFFFFFF的512MB的地址存储空间是用于NVIC、MPU及调试组件等使用; 在0xA0000000到0xDFFFFFFF的1GB的地址存储空间是用于片外外设...
  • I/O空间内存空间以及Linux内存管理

    千次阅读 2016-08-26 02:09:31
    在原文基础上进行了一些整理,加入了一些自己对IO空间内存空间的理解,在嵌入式系统中常见的用法,以及Linux系统的内存管理,虚拟地址和物理地址的概念。
  • 内存空间的分配

    千次阅读 2018-08-06 20:07:25
    内存中,供用户使用的内存空间分为三部分 程序存储区 静态存储区 动态存储区 程序存储区 存放函数体的二进制代码,就是存放程序代码 程序中所用的数据,分别存放在静态存储区,动态存储区中 静态存储区...
  • 有Win7用户反应在打开大型软件时会出现存储空间不足的提示,造成这个问题的原因是电脑的内存不足,解决方法有两种,增加物理内存和增加虚拟内存,下面小编就给大家带来Win7存储空间不足的两种解决方法,一起来看看吧...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,477,773
精华内容 991,109
关键字:

内存空间