c++函数返回值
当返回值的类型为指针类型时,该指针是物理地址还是逻辑地址(逻辑地址是段地址加偏移地址,返回的四个字节中,高字为段低字为偏)
追问:来自手机问问cpu运行在保护模式下基于分页的内存管理吧
当返回值的类型为指针类型时,该指针是物理地址还是逻辑地址(逻辑地址是段地址加偏移地址,返回的四个字节中,高字为段低字为偏)
追问:来自手机问问cpu运行在保护模式下基于分页的内存管理吧
答案:返回的是一个指针,指向一个地址。比如你告诉你家的地址,你可以说在小明家的楼上(只有一个小明),外面挂了一条红易做图的那个房子(保证他人挂的都不是红易做图),可以说是红辰花园十八栋三楼五号(只有一个花园)。只要能够具有唯一代表性就行了。
如果要说物理地址,就得以地球的经度和维度来说,你可以说是东经38°,北纬54°,海拔1021米周围的一块区域。
要说物理地址,你难道真的能够从拆出来的硬盘或者内存上指出你存储的数据所在的位置吗?那才是真正的物理地址。其他的地址,都具有逻辑意义的。地址这个东西,本身就具有逻辑性的。
逻辑地址,应该是属于一种为了方便使用或者理解而采取的一个地址表示方法。比如每个内存前面有一个标号,这已经具有逻辑性了。C++好像把这个叫成物理地址。然后C++程序员在设定一个起点和运算法则,让一系列的内存地址能够在自己的代码里能够更好的被找到。
举个例子,12345678910 11 12代表内存的存储单元,然后C++的程序使用了其中的,1 ,5 ,10 ,24, 31, 32,7,134
那么C++的程序员就可以把这个1 ,5 ,10 ,24, 31, 32,7,134..... 设置成自己程序里的1,2,3,4,5,6,7.....用这些来取代这个原来的很难记清楚的内存地址。按照理解,前者是物理的,后者则是逻辑的。
假如你的代码在你新规定的1,2,3,4,5,6,7序列里,又有分类,那么你就可以再设定一个逻辑分类,比如把1,5,4设置成新的1,2,3。
只要你能够正确的找到你的内容,只要你能够让程序更好的运行,让自己更好的理解。就要把物理问题逻辑化,逻辑问题再逻辑化。
而且你指针返回的就是一个指针,和int型,char型,string返回的东西都是一样的,任何类型的返回都是一个值,在你说的这个逻辑地址和物理地址上没有区别,只是它们存储的东西不同。指针里面的数据存储的是例外一个地址,int型里存储的是一个数字,可能是你的年龄,char型是性别之类的。
~你提出这个问题的时候思路有一点问题,因为你提的问题和指针无关。仅仅是函数返回值的问题。
在32位操作系统里面,一般返回的东西就是叫做地址,不是逻辑地址也不是段地址,是使用flat memory mode的那种,32位的地址。这个地址需要由操作系统以及计算机硬件进行映射之后才是4G内存中的某个具体的物理地址我记得应该是物理地址
上一个:学C++一定要会英文吗?
下一个:C++的发展历史