1、首先来说一下“是否能够指定堆栈的起始地址为0x100000000”这个问题。
我不知道你说的这个0x100000000的地址到底是物理地址还是线性地址,还是说是段内偏移地址(或者严格地说是逻辑地址)。当然说这一段话的前提是在x86平台上,其他平台可能是另外一回事。对于物理地址,x86保护模式(甚至是其他非实模式)下,用户程序是根本无法接触到物理地址的。对于线性地址,用户程序也是无法直接涉及的。因为x86平台下物理地址是CPU在特定场合下给操作系统设计人员提供的,其他场合也不能直接设计,除非操作系统设计人员压根就没打算从实模式切换到保护模式,实模式下确实在用物理地址。能够使用线性地址的地方也不是很多,也就是那几个特殊场景。只要是保护模式下的用户程序,编程过程中绝对用的是逻辑地址,而且程序猿也无法自己决定逻辑地址中的段选择符,程序猿自己能确定的也只是段内偏移。因为段选择符是由操作系统决定的。
但感觉你要问的应该是段内段内偏移吧。因为,既然你问这个问题,那么你应该没有接触过底层设计。