shangxiao 发表于 2023-12-26 20:58:46

占有空间为多少呢?

name segment
...
name ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为___。

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

人造人 发表于 2023-12-26 21:01:39

N + 0x100 ?
PSP的大小是0x100
https://baike.baidu.com/item/%E7%A8%8B%E5%BA%8F%E6%AE%B5%E5%89%8D%E7%BC%80/2173868

jackz007 发表于 2023-12-26 21:16:41

      汇编代码的段一般会从 10H 的整数倍的位置开始,同时,也在 10H 整数倍位置处结束,所以,这个段实际占用的空间为 :
(N + 0FH) / 10H * 10H
         字节
页: [1]
查看完整版本: 占有空间为多少呢?