当前位置: 首页 > wzjs >正文

手机网站自动跳转怎么解决seo外链代发

手机网站自动跳转怎么解决,seo外链代发,公关做的好的网站,网站索引量前言&#xff1a; 在上一张讲解了结构体的基本知识&#xff0c;在本章深入讲解一下结构体。 如内存对齐&#xff0c;传参&#xff0c;实现尾段。 首先提一个问题吧&#xff0c;如下的代码结果输出是多少&#xff1f; #include <stdio.h> struct s1 {char name;int id…

前言:

在上一张讲解了结构体的基本知识,在本章深入讲解一下结构体。

内存对齐传参实现尾段

首先提一个问题吧,如下的代码结果输出是多少?

#include <stdio.h>
struct s1
{char name;int id;char xue;}s1;
struct s2
{char e1;char e2;int e3;
}s2;
int main()
{printf("%zd\n", sizeof(s1));printf("%zd\n", sizeof(s2));return 0;
}

6,6???

nonono。

大家是如何计算的了,是char是一个字节,int是4个字节,是所以相加一共6个字节嘛?

正确的答案如下:

这就需要本章的知识了。

结构体内存对齐

对齐规则

  • char:1字节对齐
  • short:2字节对齐
  • int:通常为4字节对齐,但在某些平台可能为2字节对齐。
  • double:8字节对齐。
  1. 结构体对齐

    四大黄金法则

    • 首地址规则:结构体首地址 = max(成员对齐要求) 的整数倍

    • 成员偏移规则:成员偏移量 = min(成员大小, 当前对齐值) 的整数倍

    • 整体大小规则:结构体总大小 = max(成员对齐要求) 的整数倍

    • 嵌套结构规则:子结构体的对齐值取其自身最大对齐值

问题分析: 

struct Example 
{
char c1;
int n;
char c2;};               // 总大小=12字节

 c1在0的位置储存。

n不在1的位置储存,因为法则二中说了,偏移量是当前的的整数倍,所以向下浪费3个大小,n储存在4的位置,占4个字节。

c2储存在8的位置,结束了嘛?

没有。根据法则三总大小是max的整数倍,max也就是4,int的字节大小,所以继续向下浪费3各大小。

总大小是12。

大家可以分析一下s2是如何储存的了。

s1与s2的区别是顺序换了一下

struct s2
{char e1;char e2;int e3;
}s2;

分析如下: 

0,1分别储存e1,e2 

2不是4的整数倍,所以向下浪费2个字节,在储存int的四个字节,在分析它的储存值是max的整数倍嘛,欧克是滴

答案是8!!

为什莫存在内存对齐

  1. 平台(移植性)原因:
    不是所有的硬件平台都能够访问任意地址上的任意数据。例如:特定的硬件平台只允许在特定地址获取特定类型的数据,否则会导致异常情况。

  2. 性能原因:
    若访问未对齐的内存,将会导致 CPU 进行两次内存访问,并且要花费额外的时钟周期来处理对齐及运算。而本身就对齐的内存仅需要一次访问就可以完成读取动作。

修改默认对齐数

在C语言中,修改默认对齐数通常通过编译器特定的预处理指令实现。以下是详细步骤和注意事项:

方法:使用 #pragma pack(n)

  1. 设置对齐数

    #pragma pack(n)  // 将默认对齐数设置为n字节(n通常为1, 2, 4, 8等)

    此指令后的结构体将按照n字节对齐,直到遇到新的#pragma pack指令。

  2. 恢复默认对齐

    #pragma pack()  // 恢复编译器默认对齐方式

  3. 保存并恢复原有设置(推荐)

    #pragma pack(push, n)  // 保存当前对齐状态,并设置新对齐数为n
    // 定义需要特殊对齐的结构体
    #pragma pack(pop)      // 恢复之前保存的对齐状态

示例:

#include <stdio.h>#pragma pack(push, 1)  // 保存当前对齐,设置对齐数为1
struct Example {char a;    // 1字节int b;     // 4字节(原本可能需要对齐到4,现按1字节对齐)double c;  // 8字节(原本可能需要对齐到8,现按1字节对齐)
};
#pragma pack(pop)      // 恢复原有对齐int main() {printf("结构体大小: %zu\n", sizeof(struct Example));  // 输出:1 + 4 + 8 = 13(无填充)return 0;
}

注意事项

  1. 编译器差异

    • #pragma pack 是MSVC和GCC等主流编译器支持的指令,但属于编译器扩展,不属于标准C。

    • GCC还支持 __attribute__((packed)) 对单个结构体取消对齐:

      struct Example {char a;int b;double c;
      } __attribute__((packed));

  2. 性能影响

    • 减少对齐数可能降低内存占用,但可能导致未对齐内存访问,影响性能(尤其在硬件要求严格对齐的平台上)。

  3. 可移植性

    • 依赖编译器指令的代码可能在不同平台间表现不一致,建议封装平台相关代码并使用条件编译。

总结:

本章讲解结构体的内存对齐,对齐值,和修改对齐数。

如果有所帮助的请关注一下,我们下章再见!!!

http://www.dtcms.com/wzjs/416938.html

相关文章:

  • 女女做那个动漫视频网站济南全网推广
  • 怎么做卡商网站如何制作一个属于自己的网站
  • 网站关键词选取的步骤国外域名注册
  • 网站建设和网页制作seo入门培训教程
  • 无锡上海网站建设注册平台
  • 网站建设软文短网址生成网站
  • 如何测试自己做的网站关键词全网搜索
  • 网站制作简单模版微信营销的方法
  • 投资网站实名认证可以做吗亚马逊关键词排名提升
  • 网站收录后然后怎么做域名推荐
  • 专业做网站建设 昆山网站优化方案怎么写
  • 本地网站建设教程最近时政热点新闻
  • 龙岩营销型网站建设营销策略的重要性
  • 模板网站开发seo的搜索排名影响因素有
  • 外贸建站模板免费谷歌搜索引擎入口2021
  • 发布网站建设需求的经验seo公司推广
  • 怎样把在本地安装好的wordpress上传到服务器优化网站关键词优化
  • 做代练网站能备案seo优化方法有哪些
  • 企业网站案例公司网站设计模板网站
  • 百度seo排名在线点击器网站seo站群软件
  • 哪里能做网站免费发布信息网网站
  • 企业门户网站建设内容做网站怎么做
  • 建设电子商务网站的目的滁州网站seo
  • 网站建设与制作总结市场调研报告范文模板word
  • 广告网站制作多少钱搜全网的浏览器
  • 关于网站建设的请示互联网营销的方法有哪些
  • 做网站优化如何遍文章网络营销品牌策划
  • 深圳网站开发ucreator优化关键词的方法
  • 网站建设方案书 内容管理制度外贸网站建设推广公司
  • 沈阳建站价格乐天seo视频教程