c大小为0的数组

2023-05-16

大小为0的数组  

Q:数组大小为0应该怎么理解? 
比如: 
struct page *page[0]; 
unsigned long private[0] ____cacheline_aligned;

A:一个很好的例子就是 
struct unix_address 

atomic_t refcnt; 
int len; 
unsigned hash; 
struct sockaddr_un name[0]; 
}; 

#define UNIX_PATH_MAX 108 

struct sockaddr_un { 
sa_family_t sun_family; /* AF_UNIX */ 
char sun_path[UNIX_PATH_MAX]; /* pathname */ 
}; 

其中name实际上指向unix_address结构之后的空间。 
好处就是sockaddr_un是变长的,为了不浪费空间,就这样定义。到实际分配unix_address结构的时候按实际的地址大小一并分配空间,那样就可以通过unix_address->name来访问实际的地址。

这样做的具体的优点:
struct unix_address 

atomic_t refcnt; 
int len; 
unsigned hash; 
void *name; 
}; 

1。name占用空间(4字节) 
2。分配空间的时候可以一起分配,但是需要把p->name设置为=p++,访问name的值时需要指针中
转一下 

而 
struct unix_address 

atomic_t refcnt; 
int len; 
unsigned hash; 
struct sockaddr_un name[0]; 
}; 
没有上面两个缺点 
1。它不占用结构的空间 
2。如果访问某个p->name,却可以访问紧接p的内存空间 
利用上面两个特性,就可以根据实际的unix域地址大小来一起分配空间,通过p->name访问地址


-------------------------------------------------------------------

|                 |实际地址|          

-------------------------------------------------------------------

^                  ^

|                   |

p                  name 

  

它可以用来定义一个变长的结构体,比如你可以动态分配这个结构体,并把分配的长度等于sizeof(struct) + len,这样len这么长的内存就可以直接用最后的那个没有实际空间的指针来引用了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c大小为0的数组 的相关文章

  • VirtIO实现原理——vring数据结构(转)

    转自 VirtIO实现原理 vring数据结构 xff0c 添加了一些注释 文章目录 Guest 数据结构的介绍 xff0c 我们参照的virtio spec的定义 xff08 参考Virtual I O Device Version 1
  • (转)ucos的事件 任务的通讯和同步 信号量 互斥量 消息邮箱 消息队列

    这会想了想 xff0c 在复习资料后 xff0c 最后再做个核心代码分析 ucos中使用信号量 消息邮箱 消息队列 xff0c 这些数据结构来作为通信中间媒介 这些数据结构会影响任务的程序流程 xff0c 因此也叫做事件 一 信号量 是进行
  • Advanced Installer打包Winform后安装在C盘权限不足的解决方法

    Advanced Installer打包Winform后安装在C盘权限不足的解决方法 开发环境 xff1a VS2012 运行环境 xff1a Win7 43 问题描述 xff1a Advanced Installer是一个使用起来很方便的
  • Python 读取WAV音频文件 画频谱

    Python 读取WAV文件 import wave import struct from scipy import from pylab import 读取wav文件 xff0c 我这儿读了个自己用python写的音阶的wav filen
  • Python 低通滤波器

    Python低通滤波器 读取ExcelProc目录下的out txt文件中的波形数据 xff0c 然后绘制出原始数据波形 xff0c 最后再通过低通滤波器进行一次滤波 coding utf 8 from scipy import signa
  • Python 绘制频谱

    coding utf 8 import numpy as np import pylab as pl sampling rate 61 8000 fft size 61 512 t 61 np arange 0 1 0 1 0 sampli
  • Python 读取WAV文件并绘制波形图

    coding utf 8 import wave import pylab as pl import numpy as np 打开WAV文档 f 61 wave open r 34 1 wav 34 34 rb 34 读取格式信息 ncha
  • 移植开源EasyPR的车牌识别源码到Android工程

    一直对图像处理很感兴趣 xff0c 上次等车无聊时下载了一个车牌识别软件发现效果挺好的 xff0c 便更加产生了兴趣 xff0c 开始在网上搜索资料 xff0c 在网上事先找打了 taotao1233在VC和Anroid上实现的车牌识别方案
  • 套接字和文件描述符

    基本概念 xff1a a 一个TCP连接的套接字对 xff08 socket pair xff09 是一个定义该连接的两个端点的四元组 xff1a 本地IP地址 本地TCP端口 外地地址 外地TCP端口 套接字对 唯一标识一个网络上的每个T
  • Linux C/C++实现https post/get请求

    Linux C C 43 43 要实现https访问借助于libcurl工具 xff0c 如果是实现自定义SSL证书通信校验的 xff0c 可以通过C调用openssl来实现 xff0c 也可以通过libcurl来 记得linux上提前安装
  • ROS2读取realsense摄像头数据并发布topic到ros2

    环境 xff1a ubuntu18 04 ros2 写在前面 xff1a 最近在写项目的自动化测试 xff0c 需要实现先从realsense camera录制一段数据 xff0c 在test case中需要以发布topic的方式播放录制的
  • 研究型论文_基于自编码器和集成学习的半监督异常检测算法

    文章目录 基于自编码器和集成学习的半监督异常检测算法论文摘要论文解决的问题1 算法原理2 算法设计算法的创新点参考资料 基于自编码器和集成学习的半监督异常检测算法 论文摘要 异常检测用来预处理数据 xff0c 挖掘异类数据信息 xff0c
  • 直接上干货!为什么Flutter能最好地改变移动开发?成功拿下大厂offer

    前言 这里整理的是一些与技术没有直接关系的面试题 xff0c 但是能够考察你的综合水平 xff0c 所以不要以为不是技术问题 xff0c 就不看 xff0c 往往有时候就是这样一些细节的题目被忽视 xff0c 而错过了一次次面试机会 想要成
  • 云服务器上ros安装

    Ubuntu16 04安装ROS Kinetic详细过程 xff1a https blog csdn net weixin 43159148 article details 83375218 出现xx release not found x
  • 从驱动到转行到游戏开发的经验

    已经转行 xff0c 但是从自己熟悉的行业转入一个新行业 xff0c 各种心酸只有自己知道 以下是我转行中所读到的图形学相关书 xff1a 1 xff0c Opengl 编程指南 或者龙书 不管你是否志在游戏行业都推荐龙书 xff0c 书中
  • vtk 提取等值面并显示

    marchingcube是提取等值面比较通用的算法 xff0c 本文利用vtk 的marching cube接口提取等值面 xff0c 并通过其绘制管线把等值面绘制出来 其原理请参考下文 xff1a 1 等值面的定义及其三角面片近似 等值面
  • 关于Runnable 和 Thread的应用场景

    摘自StackOverflow 个人觉得比较靠谱的答案 xff0c 细节请看url http stackoverflow com questions 541487 implements runnable vs extends thread
  • JAVA 泛型中的<T> 和 <?> 的应用场景

    在JAVA 泛型中 xff0c 经常看到 lt gt 应用场景为当不确定类型时 因为泛型的输入参数是类型 xff0c 而有一些状况下我们并不能确定类型
  • 构造块和静态块的应用场景

    待补充 xff0c 有点懒
  • 在Github和Git上fork之简单指南

    from https linux cn article 4292 1 rss html 以我的经验来看 xff0c 刚接触Git和GitHub时 xff0c 最困扰的一件事情就是尝试解决下面的问题 xff1a 在Git和GitHub上 xf

随机推荐

  • java 同步原理

    还未来得及写文章呢
  • (华清远见)嵌入式学习月度总结

    文章声明 xff1a 本次总结仅代表个人观点 xff0c 至于哪一家培训机构怎么样 xff0c 同xxx培训比起来如何 xff0c 是否值得报名参加 xff0c 都应该由你自己去斟酌决定 xff0c 仅提供个人感受 xff0c 不提供建议
  • FreeRTOS学习记录 01--中断管理

    文章目录 0 前言1 Cortex M 中断管理1 1 中断配置1 2 优先级分组配置1 3 FreeRTOS中断 PendSv和Systick中断优先级配置 2 FreeRTOS的临界段代码保护和开关中断2 1 临界段代码保护2 2 中断
  • 通信网络中的透传到底什么意思?

    1 透传 xff1a 指与传输网络的介质 调制解调方式 传输方式 传输协议无关的一种数据传送方式 这就好比快递邮件 xff0c 邮件中间有可能通过自行车 汽车 火车 飞机的多种组合运输方式到达您的手上 xff0c 但您不用关心它们中间经历了
  • 2016年个人工作总结、生活总结 和 2017年个人工作计划、生活计划

    个人总结 xff0c 分别对2016年的工作生活总结和计划安排 xff0c 让自己在可预见的目标路线上前进 xff0c 为了自己也为了以后的幸福 一 2016年工作总结 1 2016年上半年 xff0c 完成小步环卫的智能手环 后台 APP
  • pip安装baidu-aip的方法

    记住你以后就有名字啦 万能小p xff1a pip install baidu aip i http pypi douban com simple trusted host pypi douban com 中间错误是这样的 xff1a Co
  • 计算机网络习题集_主打选择填空

    计算机网络习题 计算机网络习题第一章 概述第二章 物理层第三章 数据链路层第四章 网络层第五章 运输层第六章 应用层 附上电子版 链接 xff1a https pan baidu com s 1Y XyB3uAitkz0FtW6u1n0g
  • 不能错过的六大在线画图网站

    图表网站列表 xff1a 1 Highcharts2 online visual paradigm3 everviz4 echarts5 AntV6 fooplot 1 Highcharts Highcharts xff1a https w
  • ubuntu software database is broken问题解决

    ubuntu software database is broken 出现如下字样 xff1a ubuntu software database is broken It is impossible to install or remove
  • 批量处理:读取文件夹,将json文件转化为txt文件

    读取文件夹 xff0c 将json文件转化为txt文件 一 样例1 json文件只有一个样本1 json文件内容2 代码转化3 效果图 二 样例2 json文件中有多个样本1 json文件内容2 代码转化3 效果图 三 样例3 json文件
  • Ubuntu18.04对应的ROS安装步骤教程

    Ubuntu18 04对应的ROS安装教程 一 ROS配置1 配置Ubuntu18 04 软件仓库2 开始安装3 测试 二 遇到的问题1 ROS无法下载问题2 sudo rosdep command not found3 rosdep up
  • 最简ubuntu18.04系统分区教程

    最简ubuntu18 04系统分区教程 一 在分区之前先介绍一下ubuntu的文件系统二 分区详情 一 在分区之前先介绍一下ubuntu的文件系统 1 swap xff1a 用作虚拟内存 xff0c 这个要和自己的物理内存一样大 2G 10
  • Ubuntu系统永久设置串口权限

    Ubuntu系统永久设置串口权限 1 查看串口2 查看当前用户名3 设置串口永久权限 1 查看串口 s l dev ttyUSB0 注 所属用户组为 dialout xff0c root用户才具有操作权限 2 查看当前用户名 span cl
  • 【ROS简介】

    ROS简介 1 ROS是什么 xff1f 2 ROS能干什么 xff1f 3 存在的瓶颈 xff1f 4 涉及的技术 xff08 概率机器人技术 xff09 5 内部构造 1 ROS是什么 xff1f ROS的核心是一个分布式 低耦合的通讯
  • 【上传官方服务器评估TrackingNet数据集】

    1 官方链接 数据集评估链接 xff1a https eval ai web challenges challenge page 1805 overview 2 以zip压缩包的形式提交测试结果 3 查看提交结果 4 在排行榜查看排名
  • 【git常用操作】git的分支创建、切换、提交与关联分支操作

    1 下拉项目 下拉代码建议用ssh密钥方式下拉 xff0c 配置好之后后续操作不需要输入密码等权限验证操作 xff0c 很方便 git clone span class token punctuation span 代码链接 span cl
  • 【国际学术会议举办的城市和国家】

    与计算机视觉相关的国际学术会议在不同年份举办的城市和国家列表 xff08 持续更新中 xff09 会议名 城市和国家 IJCAI2019 Macau China IJCAI2021 Montreal Canada CVPR2005 San
  • 【简历下载教程】

    这里有几个不错的简历下载网站 xff1a 1 https jianlixiazai cn 2 http www yyfangchan com 3 https sc chinaz com jianli free html 4 https sc
  • 软件工程—需求分析阶段

    第一步 需求获取 为了保证能全面地获取信息 xff0c 以更好地服务于产品设计和迭代 xff0c 产品经理必须利用内部外部等多种渠道来获取用户需求 并且因渠道差异 xff0c 产品经理所采取的方式与方法也相应会有所差异 xff0c 所以产品
  • c大小为0的数组

    大小为0的数组 Q xff1a 数组大小为0应该怎么理解 xff1f 比如 xff1a struct page page 0 unsigned long private 0 cacheline aligned A xff1a 一个很好的例子