2022-3-28 CSAPP学习笔记(第一章+第二章到2.2.4)
CSAPP(深入理解计算机系统)
计算机系统漫游
信息表示和处理
信息存储(Infomation Storage)
虚拟内存空间示意图
1. 栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2. 堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构 中的堆是两回事,分配方式倒是类似于链表。
3. 全局/静态区(static):全局变量和静态变量的存储是放在一块的,在程序编译时分配。
4. 文字常量区:存放常量字符串。
5. 程序代码区:存放函数体(类的成员函数、全局函数)的二进制代码
//大端就是符合人的直觉,小端就是反过来
实现掩码运算
x&0xFF //x的最低有效字节,其他位均置为0
x^~0xFF//除了x的最低有效字节外,其他的位都取补,最低有效字节保持不变。
x|0xFF//最低有效字节设置成全1,其他字节保持不变。
/*
x^y=(x&~y)|(~x&y)
x=0x66 y=0x39
x&&~y的结果为0x01
*/
一般无符号数进行逻辑右移,有符号数进行算数右移(即逻辑是补0,而算数右移是补1).
整数表示
补码反码
因为一半的位模式(符号位设置为1的数)表示负数,而一半的数(符号位设置为0的数)表示非负数。因为0是非负数,能表示的整数就比负数少一个。
c语言设置的强转无符号数->有符号数,利用的是改变解释位
ex:
short int x=-12345;
usigned short int b= (usigned short )x;
->>最后输出结果为 -12345 53191//主要是第一位的权重不对
/*
所谓计算机的补码,实际上就是经过计算后的源码,只是第一位是权重位,如果是1,则*(-1)再加上其他位正常.
*/
上面这个式子就解释了补码的由来,有符号数->无符号数
c语言会隐式地将有符号数强制转化成无符号数来执行计算。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】