程序执行期间的数据段

时间:2015-07-10 07:35:45

标签: linux unix memory-management data-segment

的疑问:

如果我们执行程序,以下是分配给该程序的内存类型。

image.transform = CGAffineTransformMakeScale(0.01, 0.01)
UIView.animateWithDuration(1.0, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
        self.image.transform = CGAffineTransformIdentity
    }) { (finished) -> Void in

    }

这里的数据部分起着至关重要的作用。所有初始化数据和未初始化数据都存在于数据段中。但是,我不知道在数据段中存储数据的顺序。对于Ex,初始化数据,未初始化数据,只读和读写数据。我认为以上是数据段中存在的四种类型。

所以,数据的顺序将放在数据段中。像第一个初始化数据一样,地址少于全部。接下来是未初始化的数据,其地址高于初始化数据。

先谢谢。

1 个答案:

答案 0 :(得分:0)

无法事先确定数据段中全局变量的顺序 - 这取决于您的链接器和编译器。通常链接器保留变量在链接目标文件中出现的顺序,但这不是一个硬性要求(例如,链接器可以先放置double个变量,最后放置char以保存所需的对齐字节)。

未初始化的全局数据通常出现在.bss段中,该段位于.data段之后(在您的图片中,“高于”它,因为图片的较高部分=较大的地址)。 .bss段全部为零,只有其大小存储在可执行文件中。这样,我们就不需要在二进制图像中存储长的零字符串。