【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记

简介: 【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记

前言:

《Computer Systems》学习笔记。


Ⅰ.  学习目的

为了培养对基础计算机系统的一般性理解,提高系统编程技能。数据表示和算术、机器级的程序表示、处理器结构、链接、控制流、虚拟内存、系统级IO、网络编程、并发编程。

Ⅱ.  举几个比较有意思的例子

0x00  例1 - Ints are not Integers

比如,对于 这个问题,

float:YES!

int :

💬 代码验证:

#include <stdio.h>
int main(void) {
    int a = 40000;
    int b = 50000;
    printf("a * a = %d\n", a * a);
    printf("b * b = %d\n", b * b);
    return 0;
}

🚩 运行结果如下:

首先 a * a (40000 * 40000)成功计算出了结果 —— 1600000000,这和我们预想的一样。

但是 b * b (50000 * 50000)计算的结果却并不是我们所预想的 2500000000,而是奇怪的 -1794967296,它计算出来的结果显然是错误的,因为其发生了溢出。

0x02 例2 - Floats are not Reals

再举个例子:    加法满足交换律与结合律。

对于 unsigned int 或 signed int 来说没啥问题。

但是对于 float 来说,情况似乎就不容乐观了:

💬 代码验证:

#include <stdio.h>
int main(void) {
    printf("(1e20 + -1e20) + 3.14 = %f\n", (1e20 + -1e20) + 3.14  );
    printf("(1e20 + -1e20) + 3.14 = %f\n", 1e20 + (-1e20 + 3.14)  );
    return 0;
}

🚩 运行结果如下:

0x03 例3 - 内存引用错误的例子(Memory Referencing Bug)

🔑 出现这种情况的原因:

 

 


参考资料:

Computer Systems: A Programmer's Perspective (3rd Edition)

相关文章
|
1月前
|
缓存 监控 Linux
CentOS系统如何查看当前内存容量。
以上方法都不需要特殊软件或者复杂配置即可执行,在CentOS或其他Linux发行版中都适合运行,并且它们各自透露出不同角度对待问题解答方式:从简单快速到深入详尽;从用户态到核心态;从操作层数到硬件层数;满足不同用户需求与偏好。
216 8
|
2月前
|
存储 缓存 监控
手动清除Ubuntu系统中的内存缓存的步骤
此外,只有系统管理员或具有适当权限的用户才能执行这些命令,因为这涉及到系统级的操作。普通用户尝试执行这些操作会因权限不足而失败。
460 22
|
4月前
|
存储 算法 架构师
腾讯问题:有40亿整数,如何 判断一个 int 是在其中,越快越好 ?
腾讯问题:有40亿整数,如何 判断一个 int 是在其中,越快越好 ?
腾讯问题:有40亿整数,如何 判断一个 int 是在其中,越快越好 ?
|
6月前
|
监控 Linux Python
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
224 27
|
6月前
|
Python Windows
[oeasy]python076_int这个词怎么来的_[词根溯源]整数类型_int_integer_touch
本文探讨了“int”一词的起源及其与整数类型的关联。通过词根溯源,揭示“int”来源于“integer”,意为“完整的数”,与零碎的分数相对。同时分析了相关词汇如“tact”(接触)、“touch”(触摸)及衍生词,如“tangential”(切线的)、“intagible”(无形的)和“integral”(完整的、不可或缺的)。文章还结合编程语言特性,解释了Python作为动态类型、强类型语言的特点,并总结了整型变量的概念与意义。最后预告了后续内容,提供了学习资源链接。
185 11
|
10月前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
830 59
|
10月前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
1385 58
|
10月前
|
监控 Java Android开发
深入探讨Android系统的内存管理机制
本文将深入分析Android系统的内存管理机制,包括其内存分配、回收策略以及常见的内存泄漏问题。通过对这些方面的详细讨论,读者可以更好地理解Android系统如何高效地管理内存资源,从而提高应用程序的性能和稳定性。
374 16
|
9月前
|
机器学习/深度学习 人工智能 缓存
【AI系统】推理内存布局
本文介绍了CPU和GPU的基础内存知识,NCHWX内存排布格式,以及MNN推理引擎如何通过数据内存重新排布进行内核优化,特别是针对WinoGrad卷积计算的优化方法,通过NC4HW4数据格式重排,有效利用了SIMD指令集特性,减少了cache miss,提高了计算效率。
288 3
|
9月前
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。

热门文章

最新文章