c - 修改同一内存地址上的值如何会删除以前的值? "OVERWRITTEN concept on PC' s模式操作”

标签 c memory computer-science cpu-architecture

我是计算和计算机领域的新手..我正在使用C编程进行开发,每次我陷入思考时,如果我们用新值修改它,PC如何真正删除旧值,我的意思是: 假设我在 C 上这样写

int i=6;
i=7;

那么 i 的值为 7,我知道为什么,因为我们已经将旧值修改了 7,但是 PC 究竟如何删除之前的值呢?我可以相信“以前的值被覆盖,它将被删除”,但我很好奇如何通过分配修改后的值来删除它?

这就像魔法吗?对我来说仍然很奇怪..如果有一个好的解释,我将非常感激,以说服我一旦我们修改同一内存的地址,PC如何使用覆盖模式操作来删除以前的值..

最佳答案

计算机的存储空间是有限的。他们会覆盖该存储。它不像 SSA 模型,每次赋值都会创建一个新变量。计算机确实改变了现有存储位置的值(value)。

C 语言的定义是每个变量都有自己的内存位置。分配新值不会更改地址。它不是对新的不可变值的引用,它实际上是在改变 int i 的存储。 写入新值会隐式破坏变量以前的内容。它不会任何地方。

您可以查看使用指针的示例,看看在 int *p = &i; 之后,从 *p 获取的值在执行 后发生了变化i=7; 或者通过 google 搜索有关 C 指针的教程以获取更多详细信息。

<小时/>

这不是“魔法”,只是存储单元在电学上的自然工作方式。例如单个flip-flop可以通过应用输入信号和告诉它忘记其旧值的重置信号来从一种状态更改为另一种状态。

<小时/>

物理类比是一张纸、铅笔和橡皮,而不是一大叠新索引卡。 “消耗品”(铅笔芯和橡皮擦)只是电力。 (或者更具体地说,CMOS 逻辑中的电荷。其他一些类型的数字逻辑需要电流连续流动,从而消耗大量功率。)

<小时/>

CPU 寄存器通常由 SRAM(静态 RAM)组成,请参阅 https://en.wikipedia.org/wiki/Static_random-access_memory#Writing 。例如,一个单元通常由 6 个晶体管组成,类似于触发器,但更高级,除非设置新值,否则没有电流流动。它存储 1 位,并且可以通过应用写使能信号将 SRAM 单元更新为其输入行中的值来多次写入新值。

实际的主内存通常由DRAM组成。 ,其中位作为电荷存储在电容器上。每次读完都得刷新这个费用,不过还是一个固定位置可以写入新值的概念。

关于c - 修改同一内存地址上的值如何会删除以前的值? "OVERWRITTEN concept on PC' s模式操作”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58476157/

相关文章:

c - 你如何清除 C 中的字符串 vector ?

c - libmodbus 函数输出的部分输出打印

c++ - 当您不知道确切的元素数量但可以估计上限时,分配比数组所需更多的内存是否可以?

geometry - 相机和识别的 "object"之间的距离

c - Pthreads 和信号量 - 使用 C 的多个生产者/消费者

c++ - 带有Z拼图图片的XCode错误 “Memory”?

ios - 分析xcode中的内存分配

algorithm - 二进制整数规划中的构造启发式

c++ - 是否可以使用迭代器实现递归算法?

c - 新手线程问题 (FFTW)