共享内存是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。
1)共享内存是进程间共享数据的一种最快的方法。
一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。
2)使用共享内存要注意的是多个进程之间对一个给定存储区访问的互斥。
若一个进程正在向共享内存区写数据,则在它做完这一步操作前,别的进程不应当去读、...
分类:
系统相关 时间:
2015-06-09 23:43:32
阅读次数:
209
共享内存解释:linux中进程对任何非进程地址空间的访问都是违法的,所以进程1和进程2是不能直接访问共享内存区域的,共享内存在进程1和进程2的地址空间中都会映射一段同样大小的内存区域,所有挂载在该共享内存上的进程都会开辟同样大小的内存,所有对进程内存的操作都会被同步到共享内存,以此实现进程间的通信。...
分类:
其他好文 时间:
2015-06-09 23:32:48
阅读次数:
244
本文主要讲解java多线程的基本概念,尽量用代码加以理解。最后给出阿里2015年4月份软件研发实习生笔试有关多线程的一道题的做法。
多线程是实现并发机制的有效手段,与进程相比,线程是划分得比进程更小的执行单元。此外,每个进程都有专用的内存区域,即进程之间数据和状态是完全独立的,而同一进程的线程之间,线程共享内存单元(包括代码和数据)。
Java多线程实现方式有2种,一种是通过继承Thread类...
分类:
编程语言 时间:
2015-06-08 21:38:46
阅读次数:
194
C语言的强大和良好的自由性绝大部分体现在指针的灵活运用上,指针可以说是C语言的灵魂。一、不同类型指针之间的区别和联系 1.不同类型的指针 指针变量占用内存的大小与 它本身的类型无关,而是由使用的计算机决定的。但是不同类型的指针之间也是有区别的,因为不同类型的指针变量所指向内存区域的大小并不相...
分类:
其他好文 时间:
2015-06-07 13:50:11
阅读次数:
166
程序和内存的概念
程序是指在硬盘上的可执行文件。当程序被运行时,需要将可执行文件加载到内存,在内存中的可执行文件形成进程,一个进程(文件)可以同时存在多个进程(内存)。
内存区域的划分
运行程序的时候,需要将可执行文件加载到内存中,形成进程。每个进程占据了一块独立的内存区域,这块内存区域又划分成不同的区域,从低地址到高地址依次为:代码区、只读常量区、全局区/数据区、BSS段...
分类:
系统相关 时间:
2015-06-05 10:19:27
阅读次数:
136
1.内存管理
1.1 进程中的内存区域划分
代码区 只读常理区 全局区 BSS 堆 栈
1.2 字符串存储形式之间的比较
字符指针,字符数组,字符动态内存
1.3 虚拟内存管理技术
Unix/Linux系统总的内存都是采用虚拟内存管理技术进行管理,即:每个进程都有0~4G的内存地址
(虚拟的并不是真实存在的),由操作系统负责把内存...
分类:
其他好文 时间:
2015-06-05 00:45:51
阅读次数:
125
上几张图常量池(constant
pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。String.intern():存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常..
分类:
其他好文 时间:
2015-06-04 06:26:34
阅读次数:
188
strcpy
原型:extern char *strcpy(char *dest,char *src);
用法:#include
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
例:char a[100],b[50];strcp...
分类:
其他好文 时间:
2015-06-02 09:21:58
阅读次数:
118
大概两三个月之前阅读了《深入理解Java虚拟机》(周志明著),也为了加深印象,这里简单的做下总结,想完整点了解JVM知识的也可以阅读本书,书写的不错,相当通俗易懂。第一部分 内存管理机制:Java内存区域与内存溢出:Java内存区域分为堆、栈(Java虚拟机栈和本地方法栈,不过对于hotspot来讲...
分类:
其他好文 时间:
2015-05-29 21:45:07
阅读次数:
187
程序计数器、JVM栈、本地方法栈这三个内存区域和线程是一一对应的,并且每一个线程的这三个区域相互独立互不干扰。他们都随着线程的产生而产生,线程的灭亡而灭亡。JVM栈和本地方法栈中的栈帧都随着方法的加载而入栈,随着方法的结束而出栈。栈帧的大小是在程序员写类的时候就确定下来的。因此这三种区域的内存大小都具备确定性,当方法结束或线程结束后,这些内存空间就会自动被回收掉,所以JVM无需考虑这些区域的内存回收...
分类:
其他好文 时间:
2015-05-29 10:11:00
阅读次数:
116