进程与线程(一)进程的地址空间到底是什么

进程与线程(一)进程的地址空间到底是什么

2023年8月2日发(作者:)

进程与线程(⼀)进程的地址空间到底是什么多年前的⼀个午后,那时阳光灿烂,正值青春,那天我第⼀次遇到了ta。--进程1.什么是进程?进⾏是程序的⼀次动态执⾏过程.(有动态性,和周期性)进程是独⽴拥有资源(什么资源呢)的基本单位很执⾏的基本单位。2在计算机中,进程是什么?进程是⼀个数据结构,数据结构中有个属性是p_id,就是进程的id;ppid是该进程的⽗id,还有进程所处的状态。运⾏?阻塞,僵⼫(Z)等,以后细讲。3.如何查看进程?windows先任务管理器,linux ps等命令。4linux.进程之间是如何组织的? 进程之间是⼀种树结构,⽗⼦关系。使⽤pstree,就如同下⾯init─┬─NetworkManager─┬─dhclient │ └─2*[{NetworkManager}] ├─accounts-daemon───{accounts-daemon} ├─acpid ├─apache2─┬─apache2 │ └─2*[apache2───26*[{apache2}]] ├─at-spi-bus-laun───2*[{at-spi-bus-laun}] ├─atd ├─avahi-daemon───avahi-daemon ├─bluetoothd ├─colord───2*[{colord}]

我们看到init进程是所有进程的祖宗,以后的孤⼉进程和僵⼫进程将会说。 程序的⼀次执⾏过程就是进程,写个C程序吧,然后运⾏它,我们就会发现多个进程了同时注意下⾯说的都是虚拟地址空间。1、text:看名字知道是⽂本段,C⾥⾯就是代码段,可以这么理解,其实存的是机器指令。2.初始化段: 存的是初始化的变量,如果在代码中 int a=5;说明a初始化了。2.未初始化段: int a[100],定义了,但是没初始化,会被初始化为0;3.堆和栈很重要,仔细讲讲,(java中的堆和栈是⼲啥的?)1⾸先看图,堆向上⽣长,栈向下⽣长。2.我们知道在new 创建的对象⼀定要delete(java呢?),ta就分配在堆上,说⽩了,就是程序员⾃⼰分配的内存要⾃⼰释放,他们可以没有垃圾回收。3.对于栈,是程序⾃⼰管理的,例如局部变量和临时变量等,进程结束,全部⾃动释放。(这个栈和数据结构中的栈有啥关系,还真有关系,有空会写程序如何调⽤的,最后递归的实现原理)。好了,那普通的的进程的地址空间什么样呢?其实⼤同⼩异。

void print(char *str,intp)

{

char *s1 = "abcde";//abcde在常量区,s1在栈上

char *s2 = "abcde";//abcde在常量区,s2在栈上 s2-s1=6可能等于0,编译器优化了相同的常量,只在内存保存⼀份

//⽽&s1>&s2

char s3[] = "abcdeee";//abcdeee在常量区,s3在栈上,数组保存的内容为abcdeee的⼀份拷贝

long int *s4[100];

char *s5 = "abcde";

int a = 5;

int b =6;

int c;

int d;//a,b,c,d均在栈上,&a>&b>&c>&d地址反向增长

char *q=str;//

int m=p;// char *r=(char *)malloc(1);

char *w=(char *)malloc(1);// r

printf("s1=%p s2=%p s3=%p s4=%p s5=%p na=%p b=%pc=%p d=%pn

str=%pq=%p p=%p m=%p r=%p w=%pn",

s1,s2,s3,s4,s5,&a,&b,&c,&d,&str,q,&p,&m,r,w);

}

/* 栈和堆是在程序运⾏时候动态分配的,局部变量均在栈上分配。栈是反向增长的,地址递减;malloc等分配的内存空间在堆空间。堆是正向增长的,地址递增。

r,w变量在栈上(则&r>&w),r,w所指内容在堆中(即r

下⾯将会主要看看java的内存分配

发布者:admin,转转请注明出处:http://www.yc00.com/news/1690955337a472344.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信