《CPython Internals》阅读笔记:p177-p220

devtools/2025/1/18 15:51:22/

《CPython Internals》学习第 11天,p177-p220 总结,总计 44 页。

一、技术总结

1.memory allocation in C

(1)static memeory allocation

Memory requirements are calculated at compile time and allocated by the executable when it starts.

(2)automatic memeory allocation

Memory requirements for a scope are allocated within the call stack when a frame is entered and are freed once the frame is terminated.

(3)dynamic memeory allocation

Memory can be requested and allocated dynamically at runtime by calls to the memory allocation API。

上面这几个定义摘自第 178 页。我不得不再次吐槽:既然是分类,那么分类的依据是什么?很遗憾,作者没有说。介于此,补充一个GNU的文档说明,个人觉得GNU的说明更清楚:

The C language supports two kinds of memory allocation through the variables in C programs:

Static allocation is what happens when you declare a static or global variable. Each static or global variable defines one block of space, of a fixed size. The space is allocated once, when your program is started (part of the exec operation), and is never freed.

Automatic allocation happens when you declare an automatic variable, such as a function argument or a local variable. The space for an automatic variable is allocated when the compound statement containing the declaration is entered, and is freed when that compound statement is exited.In GNU C, the size of the automatic storage can be an expression that varies. In other C implementations, it must be a constant.

A third important kind of memory allocation, dynamic allocation, is not supported by C variables but is available via GNU C Library functions.

Dynamic memory allocation is a technique in which programs determine as they are running where to store some information. You need dynamic allocation when the amount of memory you need, or how long you continue to need it, depends on factors that are not known before the program runs.

For example, you may need a block to store a line read from an input file; since there is no limit to how long a line can be, you must allocate the memory dynamically and make it dynamically larger as you read more of the line.

从GNU的文档中我们不难看出:首先根据是否需要手动可

二、英语总结(生词:0)

无。

关于英语的注解同步更新汇总到 https://github.com/codists/English-In-CS-Books 仓库。

三、其它

今天没有什么想说的。

四、参考资料

1. 编程

(1) Anthony Shaw,《CPython Internals》:https://book.douban.com/subject/35405785/

2. 英语

(1) Etymology Dictionary:https://www.etymonline.com

(2) Cambridge Dictionary:https://dictionary.cambridge.org

欢迎搜索及关注:编程人(a_codists)


http://www.ppmy.cn/devtools/151596.html

相关文章

C语言特殊操作符

文章目录 前言一、操作符1. **条件(三元)操作符** ? ::2. **逗号操作符** ,:3. **位域(bit-field)**:4. **取地址与间接访问操作符** & 和 *:5. **强制类型转换(Cas…

Linux的常用命令(一)

目录 一、文件处理命令 1.文件处理命令ls 2.文件处理命令cd 3.文件处理命令pwd 4.文件处理命令touch 5.文件处理命令mkdir 6.文件处理命令cp 7.文件处理命令mv 8.文件处理命令rm 9.文件处理命令cat 10.文件处理命令more 11.文件处理命令head 12.文件处理命令tail …

【STM32-学习笔记-10-】BKP备份寄存器+时间戳

文章目录 BKP备份寄存器Ⅰ、BKP简介1. BKP的基本功能2. BKP的存储容量3. BKP的访问和操作4. BKP的应用场景5. BKP的控制寄存器 Ⅱ、BKP基本结构Ⅲ、BKP函数Ⅳ、BKP使用示例 时间戳一、Unix时间戳二、时间戳的转换(time.h函数介绍)Ⅰ、time()Ⅱ、mktime()…

重新审视端到端传输协议:从观念到原则

将一个功能置于一个复杂系统的何处是系统设计中处处遇到的问题。 现在我们都知道传输协议的端到端原则,但在它成为原则之前只是一个观点,曾经有场辩论,有人认为传输协议应该由参与通信的每一跳协同实现,可为什么与此相对的端到端…

Android adb 调试,不在手机上点击信任 “允许usb调试” 即可连接的方式(手机需root)

前言 不知道大家有没有被这玩意儿困扰过,第一次插上手机进行 adb 调试的时候,总会弹出 “允许usb调试” 的弹窗。 这手机明明就在我的手上,为什么还要弹出这个信任框呢,这不是多此一举吗? 一个场景:我现在…

【Linux】【Vim】vim编辑器的用法

一、vim简介 Vim是一款功能强大且高度可定制的文本编辑器,广泛应用于Linux 和 Unix系统中。 它不仅继承了vi编辑器的所有特性,还增加了许多新的功能,如语法高亮、代码折叠、多级撤销等。 Vim有三种主要的工作模式: 命令模式&am…

vue中 子组件在父组件中因为异步问题导致的的underfind报错问题

问题描述 在首页中展示介个相同样式的卡片组件 其中子组件数据为父组件发送数据请求后获取 使用props进行传值处理 这时候我发现控制台出现了underfind报错 原因 当父组件通过 props 向子组件传递数据时,如果数据在父组件中是异步获取的(例如通过 AP…

Haskell语言的网络编程

Haskell语言的网络编程 引言 随着互联网技术的迅猛发展,网络编程已经成为计算机科学和软件开发领域的重要组成部分。网络编程可以让我们构建各种各样的应用程序,从简单的网页到复杂的分布式系统。而在众多编程语言中,Haskell以其独特的函数…