鱼C论坛

 找回密码
 立即注册
查看: 462|回复: 3

占有空间为多少呢?

[复制链接]
发表于 2023-12-26 20:58:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
name segment
...
name ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为___。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-26 20:59:03 | 显示全部楼层
这个问题涉及到编程中的内存对齐问题。根据不同的编译器和操作系统,内存对齐规则可能会有所不同。在大多数情况下,编译器会根据数据类型的大小来进行内存对齐,以提高访问效率。

假设段中的数据占N个字节,我们可以使用C语言来计算该段实际占用的空间。假设每个数据项都按照4字节对齐(也就是说数据项的起始地址必须是4的倍数),我们可以使用以下代码来计算实际占用的空间:
#include <stdio.h>#pragma pack(push, 4)struct {    // 在这里定义段中的数据项} segment;#pragma pack(pop)int main() {    int size = sizeof(segment);    printf("该段实际占用的空间为 %d 字节\n", size);    return 0;}
在这个例子中,我们使用 `#pragma pack` 指令来指定内存对齐规则。`#pragma pack(push, 4)` 表示将之前的内存对齐设置保存到堆栈中,并将新的内存对齐设置为4字节对齐。`#pragma pack(pop)` 表示恢复之前保存的内存对齐设置。

运行以上代码,就可以得到该段实际占用的空间。请注意,这只是一种粗略的估计,实际的内存占用可能会因编译器和操作系统的不同而有所变化。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-26 21:01:39 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-26 21:16:41 | 显示全部楼层
        汇编代码的段一般会从 10H 的整数倍的位置开始,同时,也在 10H 整数倍位置处结束,所以,这个段实际占用的空间为 :
(N + 0FH) / 10H * 10H
         字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表