【发布时间】:2021-03-10 18:17:14
【问题描述】:
在 NASM 中存储字符串的一般方法是使用 db,如 msg: db 'hello world', 0xA。我认为这将字符串存储在 bss 部分。所以字符串会占用整个程序的存储空间。相反,如果我们将它存储在堆栈中,它只会在本地帧期间处于活动状态。对于小字符串(小于 8 字节),可以使用 mov dword [rsp] 'foo' 来完成。但是对于较长的字符串,必须使用多个指令拆分和存储字符串。所以这会增加可执行文件的大小(我是这么认为的)。
那么现在,在具有多个字符串的大型程序中哪个更好?我上面的任何假设都是错误的吗?
【问题讨论】:
-
bss 部分通常用于在运行时进行零初始化。初始化数据可以进入数据部分或文本部分。或者也可能有只读数据的特定部分。您的问题中的小错误:使用单个 dword 写入一次只能初始化 4 个字节,如果您想要包含零终止符字节,这是一个最多 3 个字节的字符串。