上一页 1 2 3 4 5 6 7 8 9 10 ··· 31 下一页
摘要: 例子1 我们先来看下面的一个例子: #include <stdio.h> int main(){ char str[10] = {0}; gets(str); printf("str: %s\n", str); return 0; } 在 main() 函数内部定义一个字符数组,并通过 gets() 阅读全文
posted @ 2021-06-18 17:40 Smah 阅读(1948) 评论(0) 推荐(0)
摘要: 静态内存分配 在进程的地址空间中,代码区、常量区、全局数据区的内存在程序启动时就已经分配好了,它们大小固定,不能由程序员分配和释放,只能等到程序运行结束由操作系统回收。这称为静态内存分配。 动态内存分配 栈区和堆区的内存在程序运行期间可以根据实际需求来分配和释放,不用在程序刚启动时就备足所有内存。这 阅读全文
posted @ 2021-06-18 17:39 Smah 阅读(1308) 评论(0) 推荐(0)
摘要: debug 前面我们只是讲解了一个函数的活动记录是什么样子的,相信大家对函数的详细调用过程的认识还不是太清晰,这节我们就以 VS2010 Debug 模式为例来深入分析一下。 请看下面的代码: void func(int a, int b){ int p =12, q = 345; } int ma 阅读全文
posted @ 2021-06-18 17:38 Smah 阅读(2022) 评论(0) 推荐(0)
摘要: 函数调用 我们知道,一个C程序由若干个函数组成,C程序的执行实际上就是函数之间的相互调用。请看下面的代码: #include <stdio.h> void funcA(int m, int n){ printf("funcA被调用\n"); } void funcB(float a, float b 阅读全文
posted @ 2021-06-18 17:36 Smah 阅读(787) 评论(0) 推荐(1)
摘要: 引言 函数的调用和栈是分不开的,没有栈就没有函数调用,本节就来讲解函数在栈上是如何被调用的。 栈帧/活动记录 当发生函数调用时,会将函数运行需要的信息全部压入栈中,这常常被称为栈帧(Stack Frame)或活动记录(Activate Record)。活动记录一般包括以下几个方面的内容: 1) 函数 阅读全文
posted @ 2021-06-18 17:30 Smah 阅读(1882) 评论(0) 推荐(2)
摘要: 引言 在《Linux下C语言程序的内存布局(内存模型)》中我们讲到,程序的虚拟地址空间分为多个区域,栈(Stack)是其中地址较高的一个区域。栈(Stack)可以存放函数参数、局部变量、局部数组等作用范围在函数内部的数据,它的用途就是完成函数的调用。 栈内存由系统自动分配和释放:发生函数调用时就为函 阅读全文
posted @ 2021-06-18 17:27 Smah 阅读(4525) 评论(0) 推荐(2)
摘要: 引言 首先我们要解释一个概念——进程(Process)。简单来说,一个可执行程序就是一个进程,前面我们使用C语言编译生成的程序,运行后就是一个进程。进程最显著的特点就是拥有独立的地址空间。 严格来说,程序是存储在磁盘上的一个文件,是指令和数据的集合,是一个静态的概念;进程是程序加载到内存运行后一些列 阅读全文
posted @ 2021-06-18 17:25 Smah 阅读(994) 评论(0) 推荐(1)
摘要: 引言 在32位环境下,Windows 默认会将高地址的 2GB 空间分配给内核(也可以配置为1GB),而将剩下的 2GB 空间分配给用户程序。 内存分布 不像 Linux,Windows 是闭源的,有版权保护,资料较少,不好深入研究每一个细节,至今仍有一些内部原理不被大家知晓。关于 Windows 阅读全文
posted @ 2021-06-18 17:24 Smah 阅读(1438) 评论(0) 推荐(0)
摘要: 引言 在《虚拟地址空间以及编译模式》一节中讲到,虚拟地址空间在32位环境下的大小为 4GB,在64位环境下的大小为 256TB,那么,一个C语言程序的内存在整个地址空间中是如何分布的呢?数据在哪里?代码在哪里?为什么要这样分布?这些就是本节要讲解的内容。 内存模型 程序内存在地址空间中的分布情况称为 阅读全文
posted @ 2021-06-18 17:23 Smah 阅读(2149) 评论(0) 推荐(1)
摘要: 引言 通过页表完成虚拟地址和物理地址的映射时,要经过多次转换,还要进行计算,如果由操作系统来完成这项工作,那将会成倍降低程序的性能,得不偿失,所以这种方式是不现实的。 MMU 在CPU内部,有一个部件叫做MMU(Memory Management Unit,内存管理单元),由它来负责将虚拟地址映射为 阅读全文
posted @ 2021-06-18 17:18 Smah 阅读(1526) 评论(0) 推荐(2)
上一页 1 2 3 4 5 6 7 8 9 10 ··· 31 下一页