C语言结构体效率,C语言为什么使用结构体效率会高?一文给你讲透

本文探讨了C语言中使用结构体相对于独立全局变量的效率优势。通过实例分析,展示了结构体如何节省指令周期和内存空间,特别是在Cortex架构中。优化编译选项可以进一步减少指令数量,提高CPU效率。建议在适当情况下尽量使用结构体。
摘要由CSDN通过智能技术生成

作为过来人,我发现很多程序猿新手,在编写代码的时候,特别喜欢定义很多独立的全局变量,而不是把这些变量封装到一个结构体中,主要原因是图方便,但是要知道,这其实是一个不好的习惯,而且会降低整体代码的性能。

另一方面,最近有幸与大神【裸机思维】的傻孩子交流的时候,他聊到:“其实Cortex在架构层面就是更偏好面向对象的(哪怕你只是使用了结构体),其表现形式就是:Cortex所有的寻址模式都是间接寻址——换句话说一定依赖一个寄存器作为基地址。

举例来说,同样是访问外设寄存器,过去在8位和16位机时代,人们喜欢给每一个寄存器都单独绑定地址——当作全局变量来访问,而现在Cortex在架构上更鼓励底层驱动以寄存器页(也就是结构体)为单位来定义寄存器,这也就是说,同一个外设的寄存器是借助拥有同一个基地址的结构体来访问的。”

以Cortex A9架构为前提,下面一口君详细给你解释为什么使用结构体效率会更高一些。

一、全局变量反汇编

1. 源文件

gcd.s

.text

.global _start

_start:

ldrsp,=0x70000000 /*get stack top pointer*/

bmain

复制代码

main.c

/*

* main.c

*

* Created on: 2020-12-12

* Author: pengdan

*/

int xx=0;

int yy=0;

int zz=0;

int main(void)

{

xx=0x11;

yy=0x22;

zz=0x33;

while(1);

return 0;

}

复制代码

map.lds

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

/*OUTP

在Linux系统中,使用C语言操作ARP缓存是一个涉及到底层网络知识和编程技巧的活动。要实现这一功能,用户程序需要通过ioctl函数与内核通信。首先,需要定义相应的socket,并使用正确的ioctl命令来操作ARP缓存。具体操作包括: 参考资源链接:[C语言操作ARP缓存:获取、添加与删除](https://wenku.csdn.net/doc/sbtdv3d5mv?spm=1055.2569.3001.10343) 1. SIOCDARP:此命令用于删除ARP缓存表中的一项。你需要提供要删除的IP地址,然后通过ioctl传递给内核。例如,要删除IP地址为***.***.*.*的ARP表项,你需要将此IP地址转换为网络字节序,并填充到sockaddr_in结构中,然后使用ioctl函数删除。 2. SIOCGARP:此命令用于查询ARP缓存表中的一个特定表项。你需要将目标IP地址放入sockaddr_in结构体,然后调用ioctl函数。成功执行后,可以通过读取sockaddr_in结构体中的信息来获取对应的MAC地址。 3. SIOCSARP:此命令用于在ARP缓存表中添加一个新的表项。你需要构建一个包含IP地址和MAC地址的sockaddr结构体,以及一个arp_req结构体来包含更多的选项,如arp_flags设置为静态或动态。然后通过ioctl函数将新的ARP表项添加到系统中。 在进行这些操作之前,建议详细了解ARP协议的工作机制以及Linux内核中ARP缓存的处理方式。这样不仅有助于编写正确的程序代码,还能帮助理解底层网络通信的原理。 为了更好地理解这些操作,你可以参考《C语言操作ARP缓存:获取、添加与删除》一文。这篇文章详细介绍了通过C语言利用socket编程和ioctl函数操作ARP缓存的方法,并提供了相应的示例代码。通过实践这些示例,你可以加深对网络编程的理解,并掌握在Linux环境下管理ARP缓存的技术。 参考资源链接:[C语言操作ARP缓存:获取、添加与删除](https://wenku.csdn.net/doc/sbtdv3d5mv?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值