首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

结构对齐规则及为什么会有结构对齐

前言:   大家在学习结构中,在计算结构大小时想必会很疑惑,为什么结构的大小不是按照常理像数组一样一个字节一个字节的挨在一起放?今天带大家一起深入探讨一下背后的规则和原因。...结构对齐规则:    结构对齐其实就是所有成员变量都要对齐到对齐数整数倍的地址处   首先认识一下默认对齐数的概念,每个编译器都有默认对齐数,我这里使用的是vs2022,它的默认对齐数是8。  ...对齐数的计算规则是: 对齐数=编译器默认对齐数与改成员变量大小(字节)的较小值   还有一个重要特征: 结构体总大小为最大对齐数的整数倍。...接下来我举两个实例: 我定义一个如下结构: 接下来开始计算每个成员变量的对齐数。...注意如果结构里面嵌套了结构,那么嵌套在里面的结构对齐数是: 该结构的最大对齐数。 如下图所示: 为什么要结构对齐?   从上面的例子不难看出,结构对齐是会浪费空间的,可是为什么要这样做呢?

34710

结构的内存对齐规则

1.结构的内存对齐规则 1.第一个成员在与结构变量偏移量为0的地址处。 2.其他成员变量都放在对齐数(成员的大小和默认对齐数的较小值)的整数倍的地址处。...(VS中默认的对齐数是8) 3.结构体总大小为最大对齐数(每个成员变量都有一个对齐数 )的整数倍。...4.如果嵌套了结构的情况,嵌套的结构对齐到自己的最大对齐数的整数倍处,结构的整体大小就是所有最大对齐数(含嵌套结构的对齐数)的整数倍。...2.性能原因: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。...总的来说: 结构的内存对齐是拿空间来换取时间的做法 既然这样,那在设计结构的时候,我们既要满足对齐,又要节省空间,如何做到:让占用空间小的成员尽量集中在一起。

47110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    命名规则

    命名规则支持遵从 .NET 设计准则的命名约定。...在本节中 规则 描述 CA1700:不要命名“Reserved”枚举值 此规则假定当前不使用名称中包含“reserved”的枚举成员,而是将其作为一个占位符,以在将来的版本中重命名或移除它。...重命名或移除成员是一项重大更改。 CA1707:标识符不应包含下划线 按照约定,标识符名称不包含下划线 (_) 字符。 该规则将检查命名空间、类型、成员和参数。...CA1724:类型名不应与命名空间冲突 类型名不应与 .NET 命名空间的名称匹配。 与该规则冲突将使库的可用性下降。...CA1725:参数名应与基方法中的声明保持一致 以一致的方式命名重写层次结构中的参数可以提高方法重写的可用性。

    1.5K00

    python的命名规则_python命名规则

    这个倒是跟我们平时创建密码的规则刚好相反,很多时候强的密码都是要求包含大小写字母… 和cc++、java等语言一样,python在命名上也有一套约定俗成的规则,符合规范的命名可以让程序的可读性大大增加,...# -*- coding: utf8 -*-def main… 如果用空格键去打,又长又多,很容易出问题,一个小技巧,用tab代替4个空格,在pycharm中默认tab就是4个空格,不用去设置了,在linux...下一般用vi或者vim,在etcvimvimrc中添加代码set ts=4setexpandtabx保存一下就好了python命名规则对于给类,函数,变量取名,只要不违反命名规则,取任何名字都是可以的,...命名规则首先说明一点,命名规则并不是强制的,这只是约定,你可以不遵守,也可以指定团队自己使用的命名规则,但最好团队所有的成员使用… 1.python命名规则—–>下划线连接 girl_of_wfb=lgl2...命名规则,总的原则就是见名知… 命名不能与关键字同名,不能与python内部的方法、模块、函数等重名!

    3.6K10

    命名规则

    1.java类的命名规则 包名:包名是全小写的名词,中间可以由点分隔开,例如:java.awt.event; 类名:首字母大写,通常由多个单词合成一个类名,要求每个单词的首字母也要大写,例如class...HelloWorldApp; 接口名:命名规则与类名相同,例如interface Collection; 方法名:往往由多个单词合成,第一个单词通常为动词,首字母小写,中间的每个单词的首字母都要大写,例如...2.java包的命名规则 包的命名是小写字母,报的路径符合开发时候对系统模块的定义,比如实体类对实体类,服务层对应服务层,数据库访问层对应数据库访问,以便我们看了包名就明白是哪个模块,从而直接到对应的包找相应的实现...“com.公司名.项目名.模块名”,我们现在开发的项目为:com.tju.conference.XXX所以命名比较正规。...那么我们个人开发的时候命名规则是什么呢?

    1.3K10

    python命名规则

    1、模块 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况) # 正确的模块名 import decoder import html_parser # 不推荐的模块名...包也是一样 2、类名 类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头 class Farm(): pass class AnimalFarm(Farm):...5、常量 常量使用以下划线分隔的大写命名 MAX_OVERFLOW = 100 Class FooBar: def foo_bar(self, print_): print(...print_) 6、一些命名习惯 用'has'或'is'前缀命名布尔元素 is_life=True#是否活着 is_connected=True#是否连接 has_cache=True#是否有内存...复数命名集合 users=['zhangsan','lisi'] 显示命名字典 # 个人地址用全称 persons_addresses={'zhangsan':'beijing','lisi':'shanghai

    1.2K10

    变量命名规则

    本文记录编程常用的几种命名规范及其应用场景。...大驼峰命名法(CamelCase) 又称 **帕斯卡 (Pascal Case)**命名法 所有单词首字母大写,直接连接排列 类名通常使用 大驼峰命名法 示例: ServiceDiscovery...、ServiceInstance、LruCacheFactory 小驼峰命名法(lowerCamelCase) 首单词首字母小写,之后的单词首字母大写,单词直接连接 通常函数方法名、参数名、成员变量、局部变量需要使用小驼峰命名法...status_code_when_request_is_valid、CLIENT_CONNECT_SERVER_FAILURE 单词数量多时更具可读性 有时会结合驼峰命名法,变为 驼峰蛇形命名法~...匈牙利命名法(HN case) 遵循:属性 + 类型 + 描述 的方式为变量命名,使得程序员对变量类型和属性有直观了解 示例: pfnEatApple //pfn 是类型描述, EatApple

    1.3K40

    RTOS函数命名规则

    ---- 常见命名规则 匈牙利命名法:广泛应用于Microsoft Windows这类环境中; 驼峰命名法:近年来越来越流行。...帕斯卡(Pascal)命名法:与驼峰命名法类似。 只不过驼峰命名法是第一个单词首字母小写,而帕斯卡命名法则是第一个单词首字母大写。因此这种命名法也有人称之为“大驼峰命名法”。...事实上,很多程序设计者在实际命名时会将驼峰命名法和帕斯卡结合使用,例如变量名采用驼峰命名法,而函数采用帕斯卡命名法。...下划线命名法: 下划线法是随着C语言的出现流行起来的,在UNIX/LIUNX这样的环境,以及GNU代码中使用非常普遍。 ---- RTOS命名规则 变量名 u :代表unsigned。...x :为用户自定义的数据类型,比如结构,队列等。表示类型为BaseType_t。 常看到ux开头的函数,就是unsigned且用户自定义的类型。需要注意的是size_t变量前缀也是ux。

    1.9K20

    代码样式命名规则

    要使规则生效,必须具有所有命名规则属性。...属性 说明 symbols 符号组的标题;命名规则将应用于此组中的符号 style 应与此规则关联的命名样式的标题 severity 设置用于强制执行命名规则的严重性。...规则顺序 EditorConfig 文件中定义命名规则的顺序并不重要。 命名规则根据规则本身的定义自动排序。...遇到的第一个可应用规则是唯一应用的规则。 但是,如果有多个具有相同名称的规则属性 ,则最近找到的具有该名称的属性具有优先权。 有关详细信息,请参阅文件层次结构和优先级。...默认命名样式 如果不指定任何自定义命名规则,系统将使用下列默认样式: 对于具有任意辅助功能的类、结构、枚举、属性、方法以及事件,默认的命名样式为帕斯卡拼写法。

    1K40

    NEC CSS命名规则

    非换肤型网站不可滥用此类状态 .z-:为状态类样式加入前缀,统一标识,方便识别,她只能组合使用或作为后代出现(.u-ipt.z-dis{},.m-list li.z-sel{}) 布局 grid (.g-)语义命名简写文档...bodybd尾部footft主栏mainmn主栏子容器maincmnc侧栏sidesd侧栏子容器sidecsdc盒容器wrap/boxwrap/box模块 module (.m-), unit (.u-)语义命名简写导航...downloaddld注册registreg投票votevote版权copyrightcprt结果resultrst标题titlett按钮buttonbtn输入inputipt功能 function (.f-)语义命名简写浮动清除...verticalalignmiddlevam溢出隐藏overflowhiddenoh完全消失displaynonedn字体大小fontsizefs字体粗细fontweightfw皮肤 skin (.s-)语义命名简写字体颜色...backgroundbg背景颜色backgroundcolorbgc背景图片backgroundimagebgi背景定位backgroundpositionbgp边框颜色bordercolorbdc状态 .z-语义命名简写选中

    1.6K30

    C++命名规则

    如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一、带层次结构、清晰明了的命名准则就是必不可少而且非常好用的工具。...在软件开发这一高度抽象而且十分复杂的活动中,命名规则的重要性更显得尤为突出。一套定义良好并且完整的、在整个项目中统一使用的命名规范将大大提升源代码的可读性和软件的可维护性。...在引入细节之前,先说明一下命名规范的整体原则: 同一性 在编写一个子模块或派生类的时候,要遵循其基类或整体模块的命名风格,保持命名风格在整个模块中的同一性。...正确命名具有互斥意义的标识符 用正确的反义词组命名具有互斥意义的标识符,如:"nMinValue"和"nMaxValue","GetName()" 和 "SetName()" .......这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。 image.png

    1.1K60
    领券