CMU 15-213 Introduction to Computer Systems学习笔记(7) Machine-Level Programming-Data

本文深入探讨C语言中的数组和指针概念,解析两者之间的微妙差异,以及在内存分配、边界检查和多维数组处理上的具体实现。强调数组在声明时即分配空间的特点,与仅分配自身空间的指针形成对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Arrays

注意机器级代码里面是没有数组这一概念的,而是将其视为字节的集合,结构也是如此。

然后C编译器的工作就是生成适当的代码来分配该内存,从而当你去引用结构或者数组时给你正确的值

Array Allocation

一个char数组一个字符是一个字节,双精度或长整数则是8个字节,指针也是八个字节,int是四个字节。

 

Array Access

注意c语言中没有边界检查,下标变成负数的时候,会给你一个未定义的值!

Ip...val+i会被缩放。计算出的值将是起始地址加上4倍的i,不管i是什么。

Array Accessing Example

rdi是基地址,rsi存放偏移的地址。

 

Array Loop Example

老师说了一个问题 C语言中指针和数组的真正区别是什么?

对下面的每个An  

(1)是否能通过编译,在C语言中是合法语言吗

(2)其次,这可能会给我一个空指针引用吗?因为我正在引用一个指针,我们实际上没有为他指示的空间分配内存

(3)最后,如果在那个值前面用sizeof运算符,同时包括前面有*的情况

在C中声明数组的时候,既在分配空间,同时也正在创建一个允许在指针运算使用的数组名字。

但是声明指针的时候,分配的只是指针本身的空间,而没有给他指向的空间。

上图中,注意[]的优先级比*号高,还要注意的是上面使用了数组指针,具体的解释可以看<C语言中文网上面的解释>

 

Multidimensional (Nested) Arrays

上面这种排序方式是行优先

Nested Array Row Access

Multi-Level Array Example

Structures

 

Satisfying Alignment with Structures

Saving Space

将大的数据类型放在前面,这样的话更有效率。

Floating Point

floating point基础

FP Memory Referencing

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值