Chinaunix首页 | 论坛 | 博客
  • 博客访问: 365679
  • 博文数量: 92
  • 博客积分: 1037
  • 博客等级: 准尉
  • 技术积分: 854
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-27 11:13
文章分类

全部博文(92)

文章存档

2013年(2)

2012年(90)

分类:

2012-05-09 22:06:02

原文地址:认识C和内存管理 作者:But_Bueatiful

课程中推荐的C/C++在线学习资料:
高位地址:
命令行参数及环境变量
stack (存放着局部变量函数参数等数据),          向下生长   (可读可写可执行)
heap  (给动态分配内存是使用),                                        向上生长   (可读可写可执行)
bss segment 用来存放初始化的全局变量、未初始化的静态变量 和 这两种变量初始化值为0的情况))
data segment (保存初始化的全局变量初始化的静态变量(初始化值都不为0)) (可读可写不可执行)
code segment/text segment (保存代码)                                     (可读可执行不可写)                                            
低位地址:                                                
1. C语言家族 
1) C: Dennis Ritchie于1972年在贝尔实验室开发出来;是一种命令式语言(imperative system language)]
 2) C++: Bjarne Stroustrup于1979年在贝尔实验室开发出来;是一种支持泛型(generics)的命令式,面向对象的语言
 3)C#: 2001年,由微软开发。是一种多范型(multi-paradigm)编程语言,支持命令式、函数、泛型、面向对象和内存管理。
 注: 命令式语言又称强制式语言,通过指明一系列可执行的运算及运算的次序来描述计算过程的语言。平时我们用的大多数语言(比 如,C,C+,Java,C#,Python等)都是命令式语言。与它相对的是函数式语言(functional language),如Haskell,Lisp。函数式语言更像数学,命令式语言更接近人的思维。

 2. C的典型特征:

1)编译型语言(compiled language)(相对于解释型语言来说)

   编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接运行编译的结果就行了。因此效率高

   解释型语言:程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次。因此效率比较低

 2)命令式的

 3) 人工管理内存

 4)当需要涉及以下问题时使用C:

   -速度

   -内存

   -低层次特性(low-level features),如:移动stack pointer等

 

3. 内存抽象的层次(从内存的角度思考C...)  

  抽象层次                        编程语言

  --------------------------------------

  直接操作内存                     汇编语言

  访问内存                         C,C++

  内存自动管理                     Java,C#,Scheme/LISP,ML

4. C访问的内存:堆(heap)

   堆是一块儿用于动态内存分配的内存区域

   1)把它想像称为一个巨大的数组

   2)通过指针(pointer)来访问

   3)整个程序都能访问堆(如果操作系统允许的话)

 5. 人工内存管理

目的:

  1) 允许程序能够分配内存用于当前的使用

  2)当程序执行完后,能够释放内存,用于重新分配

  C语言的标准类库(standard library)中有malloc和free两个函数支持内存管理

6. 其它C访问的内存:棧(stack)

  C语言中棧是编译器自动分配和回收,用于存放函数及其参数,局部变量等的内存区域

  C函数将会分配到棧中:

  1)函数在被调用时进棧(pushed on to stack)

  2) 函数在返回时出棧(popefd off the stack)

  3) 函数能访问当前棧顶部以下的所有内存(这里所谓的“顶部以下”如下图所示)

      

 7.一些基本的C语法如变量,循环,分支等跳过。

 8. 编译器。推荐使用GCC,一般是在linux下用gcc+vim写C程序。

 9. 调试工具:gdb和valgrind。

    gdb文档:

    valgrind文档:

 10. 课后作业1及源码:

    课件主要是提供思路和引导,课后作业才是锻炼的最好途径。

 

阅读(806) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~