tansss
程序已经崩了唉,都已经segmentation fault了,指针已经飞了,找不到函数,自然进不去了
qq_宇浪丶飘逸_0
确实 差不多
虚叚的真
根据内存地址。内存地址从大到小依次为系统内核,栈,堆,数据段,代码段
AKing47
测试了下 确实 跟视频 不一样呢
慕粉3133696
0x1 代表一个地址
不管是32位 还是64位系统 都是 使用 一个 32位 2进制 或者64位二进制 来 寻找这个地址
而地址 里面 保存的 数据 是一个 8位 2进制数
这个 8位2进制 恰巧是一个字节 所以 从0x1 到0x5 增加了 4个字节
不管是 32位 还是64位
地址只是表达 具体位置 里面的 内容 确实个8位的 2进制数 而已
叶萧不被占了吧
代码段在数据段之下啊
奈何奈何
1,0x 表示16进制 我们平时说的数字就是10进制 方便区分
2,堆内存 一般情况下是 自己申请的 一般用malloc 申请的内存 是堆内存
一般我们的变量 会放在 栈内存
栈帧 也是在栈内存 的
一般情况 下 堆内存 需要 主动调用
3, 寄存器 属于硬件 已经不是内存了
CPU 可以直接 从寄存器 取数据 这样 比从内存取快非常多
不过寄存器 内存 还有缓存 之间 关系 都是 由操作系统 处理的
我们在编程过程一般理解为 从内存取数据而已
这个 一般 会在 操作系统 和组成原理 里面 学习
Dean1991
函数本身代码的地址并不在栈中,它们在代码段中。
函数调用时才会将参数和各种用到的变量以栈帧结构存在栈中,这会使栈依照调用顺序来增长。所以参数的压栈地址可以说明它们的调用顺序。
帅踢锅
这是函数指针声明。
这是将pquadrate声明为函数指针,它指向的是有一个int型参数,返回值为int的函数。这语句同时将pquadrate初始化为quadrate的地址(显然quadrate应该是个函数名)。
一步一步讲这个声明:
这语句声明的是pquadrate变量,前面有个*,而且是用小括号和变量名括起来的(*pquadrate),表明这个变量名优先和*结合。声明变量时前面有*就代表这个变量是指针,所以pquadrate是个指针。那它指向什么呢?
接着看,后面有小括号,前面有类型,表明是个函数。参数就是int a,返回值是int型。所以pquadrate是指向这样的函数的指针。
慕哥2837575
栈内存我才看过这一节,当时我也这样的疑问。
后来我是这样解答的,不知道对不对。
每一个函数栈从大到小,但是内部变量从小到大。
以上只是猜测,还没继续深入看完。
勿喷。
冷掉了
栈在程序的运行中有着举足轻重的作用。最重要的是栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。堆栈帧一般包含如下几方面的信息:
1.函数的返回地址和参数
2. 临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。
首先你要知道,由于外部环境变化,某些函数每一次执行都会返回不同的结果。最典型的就是取随机数函数了
而栈里面存着的就是这些东西。所以,每一个线程都会得到不同的结果,每一个线程也都需要一个存着这个结果的栈!