一方面能足够强健的承受。另一方面又能保持清醒的品质,正是一个拥有一颗完善不可战胜的灵魂的标志

                                                    ----------马克.奥勒留 

  之所以写上面这句话是看的一些鸟书,每章前面有有那么一句名言貌似引导该章的思想。我也效仿,上句摘自沉思录卷一目录。当然上句纯属装B,与以下内容无关,本来我计划写进程控制,及通讯,想想还是从0开始来。也就是后所下一篇就是进程的控制了。

 一 谈到内存,首先想到的是数据存储,多字节存储分为大端小端,大端就是数据中的最低位存数存储在内存中的最高位,小端是数据中的最低位存储在内存中的最低位,其实我们的用的pc都是intel的X86都是小端存储,ARM一般是大端大端存储,我们来写个小程序来看看你的电脑时大端还是小段,以后给开发板板写的时候也可看看他的内存存储方式。    

 1 #include<stdio.h>
 2
 3 int mian()
 4
 5 {
 6
 7   int a = 0x12345678;
 8
 9   char *p;
10
11   p = (char *) &a;
12
13   if (*p == 0x78)
14
15    {
16
17     printf(" 这是小端。。。。\n");
18
19     }
20
21   else
22
23   printf("这是大端。。。。\n");
24
25   return 0;
26
27 }

  二 : C程序内存分布分为 代码段  数据段 栈和堆  常量存储

  代码段就是cpu执行的指令。当你打开多个一个程序的多个窗口,例如打开多个shell,他们使用的是同一个代码段,其他的数据段不同。

  数据段和缓冲段: 初始化的数据段(.data)就是数据段,它包括明确给定初值的全局变量和静态变量。如int a = 10; (全局变量);static int b = 5;

编译的时候该段的大小时不会改变的,还有就是这个段的内容就直接在内存中,不在外存上。

非初始化的数据段(.bss):在这个段上的内容是没有给初值的全局变量,如int max; 这段内容是存在外存上的。表达的不是很请,代码最具有说服力。

#include<stdio.h>
int a[30]
int main
{
printf ("hello world \n");return 0;
}

这里有全局变量a[30],int 占四个字节,int a[30] 应该占120字节,如果注释掉int a[30]变量,两个程序的大小应该相差120字节,可是事实上只差18字节,所以.bss并不是程序的一部分,保存在外存中。多的18个字节是系统标记。bss段的内容和属性。这里没有把具体结果贴出来,有兴趣可以编译完后看看他们的二进制文件的大小。

三 栈 : 所有自动变量以及函数调用时所要保存的信息,都储存在栈上。*每次调用时栈会随着函数的调用而增长,随着函数调用结束而消亡。所以我们要避免将一个指向局部变量的指针作为函数返回。因为调用完就变量就释放了,返回不来了。

自动变变量有3中存储方式:1存储在数据段或bss端(静态局部变量)。2存储在寄存器中(寄存器变量)。3存储在栈中(一般自动变量)。自动变量的作用域往往只在函数中。

四 堆 :堆用于存储用户申请的存储空间。在堆中进行动态内存分配。 int * p = (int *)malloc(sizeof(int));这里给大家补充个小知识 “*”的两个作用。一个就是大家常用的是地址解析,就是指针。第二个就是如int *p = &a;*的作用是告诉编译器p将存储一个整型的的地址。上面p是指向分配内存的首地址。其实动态分配内存有三个函数

malloc  calloc realloc具体可以google。要是再说详细就跑题了。最常用的的还是malloc.

五 常量的存储:常量分为简单的,和复杂的。如123,‘a’,复杂的如'yaoze studying...',简单的就随指令一起存储,这样可以提高程序的运行速度,长的字符串不会存储在代码段,这样会导致代码段变大。所以复杂常量,编译器会将存储的首地址转换成一个简单的变量随指令存储,把复杂的常量存储在特殊的内存段中叫.rodata.

这基本上差不多就介绍完了,由于是处女作,有错请探讨。。。。。。

ps : 接下来会一个持续更新,有关linux , C 的一些东西。下集预告:进程控制。

 

转载于:https://www.cnblogs.com/xiaoyaoc/archive/2013/04/09/3009829.html

linux C 进程内部存储管理相关推荐

  1. Linux下进程通信知识点学习笔记(一)

    4种主要事件导致进程创建: 系统的初始化: 执行了正在运行的进程所调用的进程创建系统调用: 用户请求创建一个进程: 一个批处理作业的初始化: 进程的终止: 正常退出: 出错退: 严重错误: 被其他进程 ...

  2. Linux 下 进程运行时内部函数耗时的统计 工具:pstack,strace,perf trace,systemtap

    简单记录一些 在linux下 统计进程内部函数运行耗时的统计工具,主要是用作性能瓶颈分析.当然以下工具除了pstack功能单一之外,其他的工具都非常强大,这里仅仅整理特定场景的特定用法,用作协同分析. ...

  3. Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存

    Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...

  4. Linux查看进程线程个数

    1.根据进程号进行查询: # pstree -p 进程号 # top -Hp 进程号 2.根据进程名字进行查询: # pstree -p `ps -e | grep server | awk '{pr ...

  5. linux看进程所在,linux 查看进程所在目录

    一下内容转自:https://blog.csdn.net/spring21st/article/details/50561550 通过 ps 及 top 命令查看进程信息时,只能查到 相对路径,查不到 ...

  6. linux祖先进程,Linux下的几种特殊进程

    1.Linux的登录环境 Linux是一个多任务多用户的操作系统,其设计初衷: 就是要达成多用户同时使用单个计算机大的任务. 多用户:早期计算机资源紧张,为了让更多的人都可以使用. 多任务:服务于多用 ...

  7. Linux的进程/线程/协程系列4:进程知识深入总结:上篇

    Linux的进程/线程/协程系列4:进程/线程相关知识总结 前言 本篇摘要: 1. 进程基础知识 1.1 串行/并行与并发 1.2 临界资源与共享资源 1.3 同步/异步与互斥 1.4 进程控制原语 ...

  8. Linux下进程的建立 并附Linux exec函数族

    我们都知道,进程就是正在执行的程序.而在Linux中,可以使用一个进程来创建另外一个进程.这样的话,Linux的进程的组织结构其实有点像Linux目录树,是个层次结构的,可以使用pstree命令来查看 ...

  9. Linux之进程通信20160720

    好久没更新了,今天主要说一下Linux的进程通信,后续Linux方面的更新应该会变缓,因为最近在看Java和安卓方面的知识,后续会根据学习成果不断分享更新Java和安卓的方面的知识~ Linux进程通 ...

最新文章

  1. POJ 3258:River Hopscotch (最大化最小值)
  2. UIButton防止按钮和手势的暴力点击
  3. warning:partition X does not end on cylinder boundary
  4. 为什么说雅虎的未来在于回归媒体的初衷
  5. 网易创新企业大会倒计时,云信将发布新一代音视频技术架构
  6. OpenStack——基于EXSI安装OpenStack解决方案
  7. 关于centos docker版本过低导致 is not a valid repository/tag: invalid reference format
  8. 深度残差网络_注意力机制+软阈值化=深度残差收缩网络
  9. httpModule一些细节
  10. Java——面向对象进阶(final关键字,static关键字,匿名对象,内部类,四种访问修饰符,代码块)...
  11. Mybatis中的延迟加载的使用方法
  12. Java实现计算饮料价格GUI版(入门)
  13. CCF NOI1080 统计字符
  14. .NET Core 获取 Request/Headers 等信息
  15. Kafka权威指南-学习笔记---第四章
  16. linux下thinkpad X1 carbon 2018 电源管理
  17. C++实现经典同步问题(生产者消费者、读者写者、哲学家进餐、吸烟者问题)
  18. 博士申请 | 美国明尼苏达大学葛畅教授招收隐私数据管理方向全奖博士/硕士/博后/访问学者...
  19. Cys(Npys)-(Arg)₉,H2N-C(Npys)-RRRRRRRRR-OH
  20. 数据立方体的基本计算

热门文章

  1. java snychronized_Java synchronized同步线程机制(三) | 学步园
  2. java Poi导入exel表格的数据,入库
  3. 如何在QT中读取串口数据
  4. 51nod 1101 换零钱 完全背包的变型 动态规划
  5. mysql delete limit用法_你习惯delete语句后带上limit吗
  6. Android开源底部导航,一个开源JPTabBar for Android,炫酷的底部导航栏
  7. Objective-c 创建类的使用
  8. Metro App中使用Timer
  9. VS Code修改菜单栏字体大小
  10. 浅拷贝与深拷贝的区别