Function and data model
在现代,不断地涌现着新的programming language,不断地涌现着新的programming paradigm(比如从procedural到OOP),programming technique的提高能够大大提高开发效率,但是无论如何变化,它们最终执行的时候,还是遵循“stored-program computer”的思想,即它们的可执行程序,最终都会被“吃”到RAM中,然后由CPU进行执行;为了便于理解各种programming language的run mode,可以将各种programming language的可执行程序(后面简称为program)简化为有下面两部分组成:
组成部分 | 说明 | hardware |
---|---|---|
function | 函数 | 从汇编的角度来看,函数就是一堆指令,因此对应的是instruction |
data | 数据 | 对应的是memory |
我们将它简称为**Function and data model**,显然它是一个统一的模型,建立在programming language和CPU之间。
Software and hardware
**Function and data model**连接software和hardware的uniform model,关于Software and hardware的讨论,参见文章《Software-and-hardware》
下面结合一些具体问题,来对它进行描述。
Process VMA
wikipedia Memory address # Address space in application programming
NOTE: 将process的VMA分为两部分:
1) Machine code / instruction,对应的是function
2) Data
显然,最终我们的process(run-time概念)可以看做是有上述两部分组成,显然这样的抽象有助于我们对run mode的理解;
Each memory location in a stored-program computer holds a binary number or decimal number of some sort. Its interpretation, as data of some data type or as an instruction, and use are determined by the instructions which retrieve and manipulate it.
In modern multitasking environment, an application process usually has in its address space (or spaces) chunks of memory of following types:
1) Machine code, including:
- program's own code (historically known as code segment or text segment);
- shared libraries.
2) Data, including:
- initialized data (data segment);
- uninitialized (but allocated) variables;
- run-time stack;
- heap;
- shared memory and memory mapped files.
Some parts of address space may be not mapped at all.
OOP
越来越多的programming language支持OOP,那么我们不仅要问:Function and data model能否描述使用 OOP language编写的的program呢?答案是: 可以的。分析如下:
OOP只是一种programming paradigm,不同的programming的实现方式是不同的,但是不管如何实现,它的member method本质上是function,member variable本质上是data,依然可以使用Function and data model来进行描述。因此相对于传统的procedure programming language而言,很多概念都需要向OOP扩展:
组成部分 | 说明 |
---|---|
function | 包括: - 普通函数 - 成员函数; |
data | 包括: - 普通data - member data |
Pointer
由于它们都位于RAM中,因此都有着address,因此可以通过pointer来**访问**/引用:
pointer | explanation |
---|---|
pointer to function | Stored-program computer 启发了我们 stores program instructions in electronic memory. 所以我们的所编写的function,最终也是会存入到 RAM中的,因此,它们就和数据一样,可以通过pointer对其进行access;所以这就是function pointer的本质所在; |
pointer to data |
Memory access
在 CPU-memory-access
章节进行了介绍。
Operation on memory
1、read
2、write