• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言的Struct Hack笔记

C语言的Struct Hack笔记

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c语言struct,c语言struct用法,c语言typedef struct,c语言struct什么意思,c语言中struct用法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

最近在搞Compiler的CodeGenerator实验,有一部分需要把Java程序翻译成C程序,比如:

我们应该怎么做?

在 StackOverflow 搜了一下,发现ANSI C根本没有直接办法通过指向内存的指针求得分配长度。但Windows下提供了计算指针指向的内存大小的方法[malloc.h]:

_msize : returns the size (in bytes) as an unsigned integer.


但由于操作系统策略的原因,实际分配到的大小可能会比指定的大一些.

在Linux下,指针往前偏移一个整形大小的单元也会记录实际分配的大小,我们来窥探一下那个单元的内容:


$gcc test.c
$./a.out
1  2  3  4  5  6  7  8  9  10
17 17 17 17 25 25 33 33 41 41
</div>


看来Linux的分配策略不能使得内存大小和元素个数一一对应,此法不可用。 后来发现在Linux下原来也有类似_msize的函数[malloc.h]:

但是malloc.h不属于标准C,我们还要继续寻找通用之法。经过大量查阅,终于发现了一种code trick,称作struct-hack. 前面提到过,在C语言中,int a[]是违法的,但是把它作为struct的最后一个成员却是可以的:


这是在C语言的后期加入的特性,目的就是为了实现flexible array, 这样每次给数组分配空间时,需要同步记录size大小。而求size的时候,直接取出来即可:

这个问题就说到这里。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言结构体(struct)常见使用方法(细节问题)
  • C语言变长数组 struct中char data[0]的用法详解
  • C语言中结构体(struct)的几种初始化方法
  • C语言 结构体(Struct)详解及示例代码
  • 解析C语言中结构体struct的对齐问题
  • C语言中结构体struct编写的一些要点解析
  • C语言的Struct Hack笔记

相关文章

  • 2017-05-28浅谈C++中的mutable和volatile关键字
  • 2017-05-28详解C语言编程中的函数指针以及函数回调
  • 2017-05-28C++实现合并排序的方法
  • 2022-04-30什么是IDE(集成开发环境)?
  • 2017-05-28关于win32 gettimeofday替代方案
  • 2017-05-28c语言中malloc、realloc与calloc 的区别以及联系
  • 2017-05-28关于"引用"的几点说明介绍
  • 2017-05-28解决VC++编译报错error C2248的方案
  • 2017-05-28C++中const的实现机制深入分析
  • 2017-05-28C++中基类和派生类之间的转换实例教程

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 二叉搜索树的插入与删除(详细解析)
    • C++中replace()函数使用方法汇总
    • C++中sting类的简单实现方法
    • 快速入门的一些C\C++书籍
    • Linux环境下段错误的产生原因及调试方法小结
    • C语言实现socket简单通信实例
    • 构建mfc窗体的简单示例
    • COLORREF,COLOR,RGB,CString的转化总结分析
    • C语言求矩阵的各列元素之和的代码示例
    • 全排列算法的原理和实现代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有