内存
内存
和平精英总指挥
学材料的柱子
展开
-
2020-08-23
栈溢出:每个程序,栈可以使用的内存是有限的,超出这个上限则会溢出。会将栈中其他信息覆盖掉如esp ebp 函数与栈 函数在执行的时候会将函数的全部信息压入栈中,栈帧。 包括 函数的返回地址(函数执行完毕后执行哪个地方的代码,记录这个代码在内存中的位置) 参数 局部变量 临时数据 需要保存的寄存器 内存池: 用malloc申请内存空间的时候,并不是申请多少就给多少,而是操作系统给malloc一块空间,让malloc来管理,再次申请时让malloc来分配,只有当不够用的时候再让操作系统分配新的空间给mall原创 2020-08-23 21:53:40 · 65 阅读 · 0 评论 -
Linux中c语言的内存布局
以Linux下的32位环境为例子 内核空间和用户空间 32位环境理论有4g的虚拟地址空间,其中1G交给操作系统内核使用(内核空间),剩下3G交给用户使用(用户空间) 经典内存模型 内存分区 说明 程序代码区 存放函数体的二进制代码。 常量区 常量,字符串常量,只能读不能写。 全局数据区 全局变量静态变量,读写,。 堆区 有程序员申请释放,若不释放,程序结束后,操作系统...原创 2020-02-26 22:59:29 · 271 阅读 · 0 评论 -
内存分页
为什么要内存分页 假设我们以程序为单位,把程序运行所需要的虚拟空间映射到物理空间。 程序A 需要100M内存 虚拟地址的范围是从 0X00000000 到 0X06400000 映射物理地址 0X00C00000 到 0X07000000 可以实现地址隔离 且程序可以使用固定内存地址,但是当物理内存不足的时候 就会将整个程序进行 换入换出到磁盘 会严重影响运行速度 并且由于是将整个 程序做为映射...原创 2020-02-26 19:01:55 · 256 阅读 · 0 评论 -
内存对齐
在结构体中,首次接触到了内存对齐 typedef struct inf{ char name; int age; char sex; }inf; int main() { inf zhang; printf("sizefof = %d\n",sizeof(zhang)); return 0; } 结果: [jwq@localhost memory]$...原创 2020-02-26 16:54:23 · 71 阅读 · 0 评论 -
虚拟地址空间和编译模式
所谓虚拟地址空间,就是程序可以使用的虚拟地址的有效范围。虚拟地址空间大小由操作系统决定,也受编译模式的影响 CPU的数据处理能力 cpu处理数据的能力由数据总线和主频决定 数据总线:用于cpu和内存之间传输数据,决定了cpu单次处理数据的能力 主频:决定了cpu单位时间内的数据处理次数 编译模式 32位编译模式: 一个地址4字节,共32位。理论上能访问的虚拟内存大小为2^23 bytes即4G...原创 2020-02-26 16:20:15 · 371 阅读 · 0 评论 -
虚拟地址
问题: 变量a b c是全局变量,其内存地址在链接时就应经决定了,以后也不会再改变,因此其输出结果无论何时都应该是一样的,那么如果物理内存中地址被别的程序占用了,那程序是不是就不能运行了? //代码 #include<stdio.h> #include<stdlib.h> int a,b,c; int main() { a = b = c = 0; prin...原创 2020-02-26 15:55:14 · 1566 阅读 · 0 评论 -
计算机是如何实现加法操作的
参考链接:http://c.biancheng.net/view/vip_2090.html 程序是保存在硬盘中的,要想程序运行,必须把载入内存才行,cpu只能从内存中读取数据和指令,当数据处理完后,cpu再将数据传入内存,最后在由内存存入硬盘中,可以说计算机中的一切操做都以内存为枢纽 CPU直接从内存中读取数据,处理完成后将结果再写入内存。 cpu的简单结构 运算器: 计算机的大脑 负责运...原创 2020-02-26 15:19:40 · 2416 阅读 · 0 评论