1、volatile关键字

volatile int i=10;
int j = i;
...
int k = i;

volatile告诉编译器i变量是随时可能发生变化的,例如IO端口的输入值,所以每次读取i都是从i的地址中读取,而不是,当重读读取i时发现读取变量一样,调用上次的寄存器。

下面是volatile变量的几个例子:

  1. 并行设备的硬件寄存器(如:状态寄存器)

  2. 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

  3. 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。

int square(volatile int *ptr)
{
return *ptr * *ptr;
}

可以等同为下面代码

int square(volatile int *ptr)
{
int a,b;
a = *ptr;
b = *ptr;
return a * b;
}

正确的平方代码应为

int square(volatile int *ptr)
{
int a;
a = *ptr;
return a * a;
}

2、union 联合体、共用体

结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),

共用体占用的内存等于最长的成员占用的内存。

共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。

计算的时候需要考虑字节对齐问题:

  1. 所占空间必须是成员变量中字节最大的整数倍
  2. 每个变量类型的偏移量必须是该变量类型的整数倍
  3. 对于联合体,由于所有变量都是共用一块内存,还需注意数组占用最大内

    存

    例如:

    Typedef union {double I;int k[5];char c;} DATE;

    在联合体中成员变量最大为 double 为 8 个字节,所以最终大小必须是 8

    的整数倍;又因为联合体是共占内存空间,即 int*5=20 字节,所以最终

    为 24 个字节

C语言八股文(温故知新)的更多相关文章

  1. 18)Java八股文名词

      >VO:   value-object >DTO: Data Transform Object >DTD: Document Type Definition      文档类型定 ...

  2. 再回首,Java温故知新(一):Java概述

    Java发展历程 Java的发展要追溯到1991年,Patrick Naughton(帕特里克·诺顿)和James Gosling(詹姆斯·高斯林)带领Sun公司的工程师打算为有线电视转换盒之类的消费 ...

  3. 【温故知新】——HTML5重要知识点复习

    前言:本文是自己在学习课程中的课程笔记,这里用来温故知新的,并非本人原创. 一.HTML5新特性 —— 十个新特性:凌乱 (1)新的语义标签 (2)增强型表单(表单2.0) (3)音频和视频 (4)C ...

  4. 【温故知新】——Bootstrap响应式知识点复习

    前言:本文是自己在学习课程中的课程笔记,这里用来温故知新的,并非本人原创. 开发工具 1.记事本,Editplus,... ... 2.Sublime,Dreamweaver 3.Webstorm = ...

  5. 【温故知新】——HTML基础重要知识点复习

    前言:本文是自己在学习课程中的课程笔记,这里用来温故知新的,并非本人原创. 一.HTML快速入门(重点) 1.HTML概述 1.什么是HTML HTML : Hyper Text Markup Lan ...

  6. 带你学够浪:Go语言基础系列-环境配置和 Hello world

    文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 前面几周陆陆续续写了一些后端技术的文章,包括数据库.微 ...

  7. 《面试八股文》之 Redis 16卷

    微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是 moon. redis 作为 ...

  8. Java八股文纯享版——篇②:并发编程

    注: 1.笔记为个人归纳整理,尽力保证准确性,如有错误,恳请指正 2.写文不易,转载请注明出处 3.本文首发地址 https://blog.leapmie.com/archives/c02a6ed1/ ...

  9. C语言 · 高精度加法

    问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...

  10. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

随机推荐

  1. time series classification and transfer learning

    最近在看几篇最近几年的工作和survey,希望早点能做点东西.

  2. 剖析 Redis List 消息队列的三种消费线程模型

    Redis 列表(List)是一种简单的字符串列表,它的底层实现是一个双向链表. 生产环境,很多公司都将 Redis 列表应用于轻量级消息队列 .这篇文章,我们聊聊如何使用 List 命令实现消息队列 ...

  3. ASP.NET Core – DateTime, DateTimeOffset, DateOnly, TimeOnly, TimeSpan, TimeZone, NodaTime 使用基础

    前言 心血来潮,这篇讲点基础的东西. 对日期和时区 timezone 不熟悉的读者,请先看这篇 Time Zone, Leap Year, Date Format, Epoch Time 时区, 闰年 ...

  4. ASP.NET Core Library – Hangfire

    前言 以前写过 Hangfire 的学习笔记, 但写的很乱. 这篇做个整理. 介绍 Hangfire 是用来做 server task 的, 比如: background job, delay job ...

  5. [TK] 一心净士 hzoj-tg-937-2

    万元申万的(不是) 嗯... 另外,这道题其实叫一心净士(shi) 而不是一心净土. 剖析 我们注意到题目要让我们使最小的自然数最大,那么我们的每一个区间都要从零开始放. 显然,假如我们所有区间里最小 ...

  6. volatile关键字最全原理剖析

    介绍 volatile是轻量级的同步机制,volatile可以用来解决可见性和有序性问题,但不保证原子性. volatile的作用: 保证了不同线程对共享变量进行操作时的可见性,即一个线程修改了某个变 ...

  7. 理解 Vue 的 setup 应用程序钩子

    title: 理解 Vue 的 setup 应用程序钩子 date: 2024/9/30 updated: 2024/9/30 author: cmdragon excerpt: 摘要:本文详细介绍了 ...

  8. /proc/sys/vm 使用

    这些参数主要是用来调整virtual memory子系统的行为以及数据的写出(从RAM到ROM). 这些节点(参数)的默认值和初始化的过程大部分都可以在mm/swap.c中找到. 目前,/proc/s ...

  9. 关于set实现结构体自动去重原理的推论

    转自本人博客,原文链接 先说结论 在每个操作均为log复杂度的前提下,set无法在判断顺序和重复关键字不同时完成对结构体元素的去重. 首先我们先看这段结构体定义,目的是先按num相等进行去重,再按ke ...

  10. iOS中xib文件维护使用小结

    最近一直在做项目维护,由于项目比较大,开发时间比较早,早期的很多页面都是用xib拖拽页面控件.简单的页面还好,详情页面也是拖拽搭建,项目维护成本可想而知.闲言少叙,下面说一下不是特别复杂的xib页面维 ...