笔记本电脑“内存4G,显存共享内存”好还是“内存4G显存2G”好?
仅就显存来说的话,后者好。
所谓的显存共享内存,就是说显卡本身不带多大的显存,要用的时候跟内存借。
什么是共享内存,就是有的笔记本是共享内存,多大啊?共享内存好吗?和256M的哪个好
共享内存指在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存(sharedmemory)是Unix下的多进程之间的通信方法,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。
共享内存的创建
共享内存是存在于内核级别的一种资源,在shell中可以使用ipcs命令来查看当前系统IPC中的状态,在文件系统/proc目录下有对其描述的相应文件。函数shmget可以创建或打开一块共享内存区。函数原型如下:#includesys/shm.hintshmget(key_tkey,size_tsize,intflag);函数中参数key用来变换成一个标识符,而且每一个IPC对象与一个key相对应。当新建一个共享内存段时,size参数为要请求的内存长度(以字节为单位)。注意:内核是以页为单位分配内存,当size参数的值不是系统内存页长的整数倍时,系统会分配给进程最小的可以满足size长的页数,但是最后一页的剩余部分内存是不可用的。当打开一个内存段时,参数size的值为0。参数flag中的相应权限位初始化ipc_perm结构体中的mode域。同时参数flag是函数行为参数,它指定一些当函数遇到阻塞或其他情况时应做出的反应。shmid_ds结构初始化如表14-4所示。
编辑本段初始化
shmid_ds结构数据初值shmid_ds结构数据初值
shm_lpid0shm_dtime0
shm_nattach0shm_ctime系统当前值
shm_atime0shm_segsz参数size
下面实例演示了使用shmget函数创建一块共享内存。程序中在调用shmget函数时指定key参数值为IPC_PRIVATE,这个参数的意义是创建一个新的共享内存区,当创建成功后使用shell命令ipcs来显示目前系统下共享内存的状态。命令参数-m为只显示共享内存的状态。(1)在vi编辑器中编辑该程序如下:程序清单14-8create_shm.c使用shmget函数创建共享内存#includesys/types.h#includesys/ipc.h#includesys/shm.h#includestdlib.h#includestdio.h#defineBUFSZ4096intmain(void){intshm_id;shm_id=shmget(IPC_PRIVATE,BUFSZ,0666);if(shm_id0){perror("shmget");exit(1);}printf("successfullycreatedsegment:%d\n",shm_id);system("ipcs-m");exit(0);}(2)在shell中编译该程序如下:$gcccreate_shm.c–ocreate_shm(3)在shell中运行该程序如下:$./create_shmsuccessfullycreatedsegment:2752516------SharedMemorySegments--------keyshmidownerpermsbytesnattchstatus0x0000000065536root6003932162dest0x000000002654209root666409600x0056a4d52686978root60048810x0056a4d62719747root60013107210x000000002752516root66640960上述程序中使用shmget函数来创建一段共享内存,并在结束前调用了系统shell命令ipcs–m来查看当前系统IPC状态。
编辑本段共享内存的操作
由于共享内存这一特殊的资源类型,使它不同于普通的文件,因此,系统需要为其提供专有的操作函数,而这无疑增加了程序员开发的难度(需要记忆额外的专有函数)。使用函数shmctl可以对共享内存段进行多种操作,其函数原型如下:#includesys/shm.hintshmctl(intshm_id,intcmd,structshmid_ds*buf);函数中参数shm_id为所要操作的共享内存段的标识符,structshmid_ds型指针参数buf的作用与参数cmd的值相关,参数cmd指明了所要进行的操作,其解释如表14-5所示。
编辑本段cmd参数详解
cmd的值意义
IPC_STAT取shm_id所指向内存共享段的shmid_ds结构,对参数buf指向的结构赋值
IPC_SET使用buf指向的结构对sh_mid段的相关结构赋值,只对以下几个域有作用,shm_perm.uidshm_perm.gid以及shm_perm.mode注意此命令只有具备以下条件的进程才可以请求:1.进程的用户ID等于shm_perm.cuid或者等于shm_perm.uid2.超级用户特权进程
IPC_RMID删除shm_id所指向的共享内存段,只有当shmid_ds结构的shm_nattch域为零时,才会真正执行删除命令,否则不会删除该段注意此命令的请求规则与IPC_SET命令相同
SHM_LOCK锁定共享内存段在内存,此命令只能由超级用户请求
SHM_UNLOCK对共享内存段解锁,此命令只能由超级用户请求
使用函数shmat将一个存在的共享内存段连接到本进程空间,其函数原型如下:#includesys/shm.hvoid*shmat(intshm_id,constvoid*addr,intflag);函数中参数shm_id指定要引入的共享内存,参数addr与flag组合说明要引入的地址值,通常只有2种用法,addr为0,表明让内核来决定第1个可以引入的位置。addr非零,并且flag中指定SHM_RND,则此段引入到addr所指向的位置(此操作不推荐使用,因为不会只对一种硬件上运行应用程序,为了程序的通用性推荐使用第1种方法),在flag参数中可以指定要引入的方式(读写方式指定)。%说明:函数成功执行返回值为实际引入的地址,失败返回–1。shmat函数成功执行会将shm_id段的shmid_ds结构的shm_nattch计数器的值加1。当对共享内存段操作结束时,应调用shmdt函数,作用是将指定的共享内存段从当前进程空间中脱离出去。函数原型如下:#includesys/shm.hintshmdt(void*addr);参数addr是调用shmat函数的返回值,函数执行成功返回0,并将该共享内存的shmid_ds结构的shm_nattch计数器减1,失败返回–1。下面实例演示了操作共享内存段的流程。程序的开始部分先检测用户是否有输入,如出错则打印该命令的使用帮助。接下来从命令行读取将要引入的共享内存ID,使用shmat函数引入该共享内存,并在分离该内存之前睡眠3秒以方便查看系统IPC状态。(1)在vi编辑器中编辑该程序如下:程序清单14-9opr_shm.c操作共享内存段#includesys/types.h#includesys/ipc.h#includesys/shm.h#includestdlib.h#includestdio.hintmain(intargc,char*argv[]){intshm_id;char*shm_buf;if(argc!=2){printf("USAGE:atshmidentifier");exit(1);}shm_id=atoi(argv[1]);if((shm_buf=shmat(shm_id,0,0))(char*)0){perror("shmat");exit(1);}printf("segmentattachedat%p\n",shm_buf);system("ipcs-m");sleep(3);if((shmdt(shm_buf))0){perror("shmdt");exit(1);}printf("segmentdetached\n");system("ipcs-m");exit(0);}(2)在shell中编译该程序如下:$gccopr_shm.c–oopr_shm(3)在shell中运行该程序如下:$./opr_shm2752516segmentattachedat0xb7f29000------SharedMemorySegments--------keyshmidownerpermsbytesnattchstatus0x0000000065536root6003932162dest0x000000002654209root666409600x0056a4d52686978root60048810x0056a4d62719747root60013107210x000000002752516root66640961segmentdetached------SharedMemorySegments--------keyshmidownerpermsbytesnattchstatus0x0000000065536root6003932162dest0x000000002654209root666409600x0056a4d52686978root60048810x0056a4d62719747root60013107210x000000002752516root66640960上述程序中从命令行中读取所要引入的共享内存ID,并使用shmat函数引入该内存到当前的进程空间中。注意在使用shmat函数时,将参数addr的值设为0,所表达的意义是由内核来决定该共享内存在当前进程中的位置。由于在编程的过程中,很少会针对某一个特定的硬件或系统编程,所以由内核决定引入位置也就是shmat推荐的使用方式。在导入后使用shell命令ipcs–m来显示当前的系统IPC的状态,可以看出输出信息中nattch字段为该共享内存时的引用值,最后使用shmdt函数分离该共享内存并打印系统IPC的状态。
编辑本段共享内存使用注意事项
共享内存相比其他几种方式有着更方便的数据控制能力,数据在读写过程中会更透明。当成功导入一块共享内存后,它只是相当于一个字符串指针来指向一块内存,在当前进程下用户可以随意的访问。缺点是,数据写入进程或数据读出进程中,需要附加的数据结构控制,共享内存通信数据结构示意如图14-9所示。
编辑本段结构示意
%说明:图中两个进程同时遵循一定的规则来读写该内存。同时,在多进程同步或互斥上也需要附加的代码来辅助共享内存机制。在共享内存段中都是以字符串的默认结束符为一条信息的结尾。每个进程在读写时都遵守这个规则,就不会破坏数据的完整性。
苹果笔记本电脑显存容量共享内存的好吗?
不知道所谓的好不好指的哪一方面。
显卡的显存是通过共享内存来实现,意思就是将部分内存划给显卡使用,这样可用内存就变小了,理论上肯定影响系统性能。
不过苹果本本,不是用来大型游戏的,本来就不是以性能见长的,卖点是良好的使用性。
日常应用,内存和集成核显性能足够使用了。
笔记本电脑显存容量2gb好还是共享好?
只有傻瓜才共享内存,共享内存占用系统内存,系统得卡死!笔记本如果有独立显存当然还是独立的好!
笔记本电脑共享内存好用吗
没必要,平时显卡都不会去占用这些内存,还是你在用。一旦显卡需要占用了,说明这个程序你要运行,系统不可能需要这么大的,只有是你主动点开的一个程序调用这么大的内存,你一改,到时候那个程序运行不了,至于吗?
你平时关注一下,360或者鲁大师都有悬浮窗的,4G内存一般平时用不到40%,这是后台程序比较多的时候了。
动态共享就是动态的,平时还是空的,给你用的,需要的时候就变成显卡内存了!
笔记本是共享内存的显存好不好?
不存在好不好的问题,要看使用情况。
一般来说笔记本采用集成芯片共享内存的显示子系统性能都不如独立芯片独立显存的。但也只是说性能上不好而已。你如果是个要求显示子系统强大的,如要作图,玩3D游戏,演示等,肯定是以独立显示芯片为好。如果你是个天天要用笔记本移动办公干活的,对电池的使用时间有高要求的,你也不会过分去强调什么显卡好不好,屏幕亮不亮,那都是高费电的部件,笔记本电池那点电不够你用的,用个集成芯片可能是个更好的解决方案。