CS61C 2020计算机组成原理Lecture 04

1. C Memory Layout

在这里插入图片描述

1.1 Where Do the Variables Go?

在这里插入图片描述

1.2 The Stack

在这里插入图片描述
在这里插入图片描述

1.2.1 Stack misuse example

在这里插入图片描述
gpt4解释:

在C语言中,从函数返回指向本地变量的指针是不安全的,原因在于局部变量(本地变量)的生命周期。当一个函数被调用时,它的局部变量在栈上分配内存。这些局部变量只在函数执行期间存在,一旦函数返回,这部分栈内存就不再属于该函数,会被释放或用于其他目的。

如果你从一个函数返回一个指向其局部变量的指针,那么当函数执行结束后,该指针将指向一个已经不再有效的内存区域。这种情况被称为“悬垂指针”(dangling pointer)。尝试访问通过这样的指针引用的数据是非常危险的,因为它可能导致未定义的行为,比如访问或修改其他变量的值,或者导致程序崩溃。

int* func() {int local_var = 10;return &local_var; // 返回指向局部变量的指针
}int main() {int *ptr = func(); // ptr 现在是悬垂指针// 使用 ptr 的行为是未定义的return 0;
}

在这个例子中,函数 func 返回了一个指向其局部变量 local_var 的指针。但是当 func 返回时,local_var 的生命周期结束了,因此 ptr 变成了悬垂指针。

为了避免这种问题,可以:

  1. 使用全局或静态变量。
  2. 分配动态内存(使用 malloc 或类似函数),但这要求调用者负责释放内存。
  3. 将数据传递给调用函数,而不是尝试从函数返回指向局部数据的指针。

1.3 Static Data

在这里插入图片描述

2. Addressing and Endianness

2.1 Adress

在这里插入图片描述

2.2 Endianness

在这里插入图片描述
Big-endian:高位字节存入低地址低位字节存入高地址

Little-endian:低位字节存入低地址高位字节存入高地址

//但在计算机内部一般都是小端序,与人类的阅读习惯相反,但更符合计算机读取内存的方式,因为CPU读取内存中的数据时,是从低地址向高地址方向进行读取的

举例如下图:

在这里插入图片描述

2.3 Common mistakes

寄存器是没有小端序 大端序的概念的。

在这里插入图片描述

3. Dynamic Memory Allocation

3.1 Dynamic Memory Allocation

在这里插入图片描述

3.2 sizeof()

在这里插入图片描述

3.3 sizeof() and Arrays

在这里插入图片描述

3.4 Allocating Memory

在这里插入图片描述

3.6 Releasing Memory

在这里插入图片描述

3.7 Calloc

在这里插入图片描述

3.8 Realloc

在这里插入图片描述

3.9 Dynamic Memory Example

在这里插入图片描述

4. Common Memory Problems

4.1 Know Your Memory Errors

在这里插入图片描述

4.2 Common Memory Problems

在这里插入图片描述

4.3 Using Uninitialized Values

ps,这之后的页面略,因为全是一些example,可以去原pdf看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144068.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类

全网最适合入门的面向对象编程教程:50 Python 函数方法与接口-接口和抽象基类 摘要: 在 Python 中,接口和抽象基类(Abstract Base Classes, ABCs)都用于定义类的结构和强制子类实现特定的方法,Python 没有…

5.10 创建内核目录

首先是 创建内核的目录。 修改 cmake 然后是 创建 cmake , kernel 目录下的init 目录, init 目录下的start.s 文件,再init目录下 创建init.c init.h 文件。 然后是修改cmake 然后是 start.S 的编写 然后是 创建 init.c init.h 文件。 然后是 修改 img…

如何在WordPress中添加事件Schema(分步指南)

如果你正在举办一个在线活动,那么你可能正在寻找通过网络宣传的方法。此时,模式标记可以帮助你在搜索引擎结果中提高活动的可见性。 活动模式将帮助谷歌和其他搜索引擎更好地理解你的活动详情,使它们能够在活动列表、丰富摘要和谷歌知识面板…

通过markdown表格批量生成格式化的word教学单元设计表格

素材: 模板: 代码: import pandas as pd from python_docx_replace import docx_replace,docx_get_keys from docx import Document from docxcompose.composer import Composerdef parse_markdown_tables(file_path):with open(file_path,…

华为昇腾智算中心-智算中心测试方案与标准

本方案是企业内训课程《华为昇腾智算中心深度技术研修》的一部分授课课件的样例。方案内容中详细阐述了华为昇腾环境下智算中心的测试方案和标准,以确保硬件和软件系统在实际部署和运行中的高效性和稳定性。主要内容包括集群硬件清单、节点拓扑配置以及环境配置。硬…

MySQL数据库迁移与备份实录

这里写目录标题 事情起因的概述查看磁盘空间使用情况为了进一步的明确宕机原因,查看MySQL日志信息进一步排查 如何针对磁盘空间不足进行挂载区域的修改以及数据的迁移与备份分析与梳理如何修改MySQL数据卷的挂载位置停止MySQL服务备份 MySQL 配置文件迁移 MySQL 数据…

info 命令:查看命令手册

一、命令简介 在 Linux 系统中,可以使用 man​ 查看普通的帮助手册。还可以使用 info​ 命令阅读 Info 格式的文档。 ​info​ 文档的特点:大量使用超链接,通过方向键将光标移动到链接的文字,按下回车键,就可以切换到…

新发布的OpenAI o1生成式AI模型在强化学习方面迈出了重要的一步

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

ROS第五梯:ROS+VSCode+C++单步调试

解决问题:在ROS项目中进行断点调试。 第一步:创建一个ROS项目或者打开一个现有的ROS项目。 第二步:修改c_cpp_properties.json 增加一段命令: "compileCommands": "${workspaceFolder}/build/compile_commands.json"第三…

[Python]案例驱动最佳入门:Python数据可视化在气候研究中的应用

在全球气候问题日益受到关注的今天,气温变化成为了科学家、政府、公众讨论的热门话题。然而,全球气温究竟是如何变化的?我们能通过数据洞察到哪些趋势?本文将通过真实模拟的气温数据,结合Python数据分析和可视化技术&a…

【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(3)】

【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(3)】 1、前言说明2、流程说明3、现场提交(线下)4、网上提交1-起诉书样例2-起诉书编写(1)原告信息:&…

如何将MySQL卸载干净(win11)

相信点进来的你肯定是遇到了这个问题,那就是在安装MySQL的时候操作错误,最后结果不是自己想要的。卸载重新安装又发现安装不了。其实最主要的原因就是没有将MySQL卸载干净,那么如何把MySQL卸载干净?下面本篇文章就来给大家一步步介…

sensitive-word 敏感词 v0.20.0 数字全部匹配,而不是部分匹配

敏感词系列 sensitive-word-admin 敏感词控台 v1.2.0 版本开源 sensitive-word-admin v1.3.0 发布 如何支持分布式部署? 01-开源敏感词工具入门使用 02-如何实现一个敏感词工具?违禁词实现思路梳理 03-敏感词之 StopWord 停止词优化与特殊符号 04-…

Matlab进行频率切片小波变换

Matlab进行频率切片小波变换(FSWT)源代码,将一维信号生成时频图。 输入信号可以是任何一维信号,心电信号、脑电信号、地震波形、电流电压数据等。 相比连续小波变换(CWT),频率切片小波变换(Frequency Slice Wavelet Transform,FSWT)是一种更具…

计算机毕业设计hadoop+spark知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习

《HadoopSpark知网文献论文推荐系统》开题报告 一、研究背景及意义 随着互联网技术的迅猛发展和大数据时代的到来,学术文献的数量呈爆炸式增长,用户面临着严重的信息过载问题。如何高效地从海量文献中筛选出用户感兴趣的论文,成为当前学术界…

涛思数据库安装和卸载

安装 cd opt/taos/TDengine-server-2.4.0.5 sudo ./install.sh 启动taos​ 安装后,请使用 systemctl 命令来启动 TDengine 的服务进程 systemctl start taosd检查服务是否正常工作: systemctl status taosd 升级 3.0 版在之前版本的基础上&#x…

Parasoft助力Joby Aviation符合DO-178B标准

Joby Aviation,这家成立于2009年的美国高科技企业,以其对电动垂直起降(eVTOL)技术的深刻洞察与不懈追求,正引领着全球空中出行领域的革新。作为该领域的先驱者,Joby Aviation专注于研发并商业化运营其革命性…

蓝桥杯嵌入式客观题合集

十四届模拟赛二客观题 解析:STM32微控制器的I/O端口寄存器必须按32位字被访问 解析:微分电路能将三角波转换为方波;积分电路能将方波转换为三角波 解析:放大电路的本质是能量的控制与转换 解析:具有n个节点&#xff0c…

Ansible——Playbook基本功能???

文章目录 一、Ansible Playbook介绍1、Playbook的简单组成1)“play”2)“task”3)“playbook” 2、Playbook与ad-hoc简单对比区别联系 3、YAML文件语法:---以及多个---??使用 include 指令 1. 基本结构2. 数…

Java入门:09.Java中三大特性(封装、继承、多态)02

2 继承 需要两个类才能实现继承的效果。 比如:类A 继承 类B A类 称为 子类 , 衍生类,派生类 B类 称为 父类,基类,超类 继承的作用 子类自动的拥有父类的所有属性和方法 (父类编写,子类不需要…