程序内存分布(比较全面,欢迎讨论)
在程序执行中,会给程序分配一定的内存空间,分别用来作为代码段,堆,栈使用。堆向上增长,栈向下增长。
地址空间应该是从0x00000000开始,因为所使用的是虚拟地址。
问题:这个内存空间应该是多大,根据什么得来?在程序中如何得到开始地址和结束地址?
如何得到代码段,堆,栈的开始地址?(程序中声明一个变量,然后取地址?)
一个类在内存中所占的空间不用考虑成员函数(虚函数要维护一个函数表指针),只考虑成员变量(有内存对齐问题)。
成员函数在内存中是怎样存储的,存在代码段中?成员变量存在哪里?
在程序段中呢?
在程序段中,变量在栈上分配,动态分配的成员在堆上分配空间,函数呢?存在哪里?
----------------------------------
对这个问题思考很久了,其中一部分能明白,也还有很多不明白,请达人指点。也欢迎大家讨论。
目前我所知道的一些方法为:取变量地址操作,函数指针地址,SizeOf操作。试验之后还是有很多疑问没解决。