
C
关于C的文章
肥嘟嘟的左卫门
这个作者很懒,什么都没留下…
展开
-
函数指针和函数指针类型
函数指针1. 定义每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。注意:函数指针的本质是一个指针变量,且指针指向的函数的入口地址2. 语法指向函数的指针变量的一般定义形式为: 数据类型 (*指针变量名) (参数表);3. 说明函数指针定义形式中的数据类型是指函数的返回值的类型。区分下面两个语句:int (*p)(int a, int b); //p是一个指向函数的指针变量,函数返回类型为整型int *p(in转载 2021-12-07 15:00:23 · 728 阅读 · 0 评论 -
C语言中volatile关键字作用的深刻分析
一.前言 编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,1)在硬件上:引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。2)软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变量缓存到寄存器。由于访问寄存器要比访问内存单元快的多,编译器在存取变量时,为提高存取速度,编译器优化有时..转载 2020-09-15 20:17:43 · 291 阅读 · 0 评论 -
不同平台下int类型、指针类型的数据大小
对于int类型数据和指针类型数据的大小,是非常基础的问题。在一个具体的平台上,确定他们最好的办法就是使用sizeof(type)对其进行判断,返回当前数据类型的大小。在不同的平台下,int类型和指针类型的数据类型大小时怎样的呢?如果要给出一个统一的答案,自然不可能集齐每个平台,一个个地去试,我们必须从底层进行分析。数据总线和地址总线计算机内的数据总线是CPU与外设进行数据交换的通路...原创 2019-12-13 10:29:49 · 1095 阅读 · 0 评论 -
C语言中volatile关键字的用法
volatile是一个类型修饰符(type specifier),就像我们熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量;volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。作用编辑简单地说就是防止编译器对代码进行优...原创 2019-12-10 20:12:30 · 493 阅读 · 0 评论 -
结构体所占内存大小的求解
1. 一般结构体大小对于一般的结构体大小遵循两条原则:结构体成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)结构体大小必须是所有成员大小的整数倍解释struct strA{ int a; char b; double c; short d;};1)sizeof(a)=4,a的偏移地址式4的倍数,从0开始,3结束;sizeof(b)...转载 2019-11-15 19:30:22 · 730 阅读 · 0 评论 -
.dll .so .o .a .lib .obj 文件和静动态库的关系
1.基本概念首先,介绍下动态链接库和静态链接库的概念,两者都是代码共享的方式。静态库:在链接步骤中,链接器将从库文件中取得代码,复制到可执行文件中,此种称为静态库。其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件动态库:...原创 2019-11-10 15:34:13 · 778 阅读 · 0 评论 -
C语言的for循环中i++和++i的关系
首先需要明确i++和++i的定义++是自增运算符,其作用是将作用对象的值增加1++放在作用对象的前面的话,例如++i,作用是将i加1,然后返回i加1之后的数值++放在作用对象的后面的话,例如i++,作用是将i加1,然后返回i加1之前的数值那么对于这段代码来说:#include<stdio.h>int main(){ int i; for(i = 0; ...转载 2019-10-19 13:48:10 · 5202 阅读 · 0 评论 -
C中关键字volatile的意思,主要作用是什么?(通俗易懂的)
volatile 是把变量标识为“变化中的”,意思是这个变量即使在(主线程)没有任何存取操作的情况下也可能在(被其他线程)变化。 volatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。 精...原创 2019-09-03 08:43:22 · 2350 阅读 · 0 评论 -
语句 a=a+1;是如何执行的
一、概述1、计算机中有两个主要的核心部件:CPU和内存,其中CPU负责运算而内存负责存储程序和相关的变量,每一条程序语句和变量都在内存中有对应的内存地址。2、寄存器是CPU的存储单元,每一个CPU都会有通用寄存器来给程序使用,编号R1~R32,代表有32个通用寄存器。3、CPU中的核心部件(1)程序计数器PC(Program Counter) 程序计数器是一个特殊的寄存器部件...转载 2019-09-03 08:32:11 · 5048 阅读 · 0 评论 -
c语言中小数在内存中的存储
转至:https://blog.youkuaiyun.com/tqs_1220/article/details/73550899首先看float和double在内存中是怎么存储的?float:符号位(1位)+指数位(8位)+尾数位(23位)范围:-2^-128 ~2^127 (-3.40E-38~3.40E+38)double:符号位(1位)+指数位(11位)+尾数尾(52位)范围:-2...转载 2019-07-27 10:31:54 · 1624 阅读 · 0 评论 -
ARM内存映射
寻址空间ARM处理器为32bit处理器,内部32bit地址总线理论寻址空间为4GB,对于6410来说,寻址空间的高2GB在内部为保留(reserved),低2GB(0x0~0x7FFFFFFF)可划分为2部分:主存储区(main memory area)和外设区(peripheral area)。主存储空间(Main memory area)6410内核与主存...转载 2019-07-27 13:47:32 · 1408 阅读 · 1 评论 -
内存管理
在计算机系统,特别是嵌入式系统中,内存资源是非常有限的。尤其对于移动端开发者来说,硬件资源的限制使得其在程序设计中首要考虑的问题就是如何有效地管理内存资源。本文是作者在学习C语言内存管理的过程中做的一个总结,如有不妥之处,望读者不吝指正。一、几个基本概念 在C语言中,关于内存管理的知识点比较多,如函数、变量、作用域、指针等,在探究C语言内存管理机制时,先简单复习下这几个基本概念:...转载 2019-07-15 21:56:15 · 277 阅读 · 0 评论 -
C语言相关学习心得总结
https://www.cnblogs.com/huipengbo/tag/c%E8%AF%AD%E8%A8%80/上述链接中包含以下内容:linux命令(shell)浅析c++和c语言的enum类型makefile介绍1.0c语言项目流程开发三部曲静态库和动态库的使用c语言项目开发流程二部曲c指针总结黑客技术之移花接木(劫持)C语言应用程序的...转载 2019-07-14 17:40:02 · 432 阅读 · 0 评论 -
c语言类型转换注意事项
转载自: http://blog.youkuaiyun.com/zhuimengzh/article/details/67284921、隐式转换C在以下四种情况下会进行隐式转换: 1、算术运算式中,低类型能够转换为高类型。2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。3、函数调用中参数传递时,系统隐式地将实参转换为形参的类...转载 2019-06-15 11:21:48 · 887 阅读 · 0 评论 -
调用函数时,函数栈的作用过程
1、什么是栈帧?栈帧也叫过程活动记录,是编译器用来实现函数调用过程的一种数据结构。C语言中,每个栈帧对应着一个未运行完的函数。从逻辑上讲,栈帧就是一个函数执行的环境:函数调用框架、函数参数、函数的局部变量、函数执行完后返回到哪里等等。栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器es...转载 2019-05-26 22:27:53 · 1716 阅读 · 0 评论 -
程序编译的4个过程
0.引言hello.c(源程序)是一条高级C语言程序,虽然它是以一种易读的形式,让人们容易理解。但是,它却无法直接驱动硬件CPU直接执行。为了我们编写的hello.c程序可以被执行,驱动硬件电路工作,hello.c程序必须经过一些列处理步骤,将源程序转化为可执行性的目标程序。而我们知道,机器语言就是处理器可以直接理解(与生俱来就能理解)的编程语言,机器语言有时也被叫做原生代码(Native ...转载 2019-01-11 15:00:11 · 12187 阅读 · 0 评论 -
嵌入式C编码规范
0规范制定说明0.1箴言技术人员设计程序的首要目的是用于技术人员沟通和交流,其次才是用于机器执行。程序的生命力在于用户使用,程序的成长在于后期的维护及根据用户需求更新和升级功能。如果你的程序只能由你来维护,当你离开这个程序时,你的程序也和你一起离开了,这将给公司和后来接手的技术人员带来巨大的痛苦和损失。因此,为了程序可读、易理解、好维护,你的程序需要遵守一定的规范,你的程序需要设计。“...转载 2018-07-23 08:28:21 · 1790 阅读 · 1 评论 -
如何编写优质嵌入式C程序
前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序。感觉是有一定的参考价值,所以拿出来分享,抛砖引玉。转载请注明出处:http://blog.youkuaiyun.com/zhzht19861011/article/details/45508029 摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理;分析了编译器语义检...转载 2018-07-23 08:25:45 · 1444 阅读 · 0 评论 -
用内存的视角来剖析C/C++语言中的变量、数组、结构、指针等概念的本质
对于C/C++中的很多概念从内存的视角可以深入理解它们的本质注:对于多个连续的字节存储,根据CPU平台以及开发环境的不同,分为大端和小端存储。如下图所示,存储int类型的变量a=0xABCDEFAA(4个字节)时,图1是小端存储,图2是大端存储。 内存是用于存储数据的...原创 2018-05-08 21:28:21 · 560 阅读 · 0 评论