-
栈内存中,gcc编译会作内存优化:1)使同一数据结构的变量在一起;2)先定义的变量内存地址会小于后定义的;3) 只有堆内存和栈内存可以写入数据,代码段的内存编译以后无法修改。查看全部
-
int array[2];<br><br> int *p=array;<br><br> 而赋值操作也可以由p+=3; *p=101;变成简单的p[3]=101;<br> array为常量指针,不可改变;p为变量指针,可以改变;<br><br> 数组本质上是指针常量 所以,array能做的事情,p也能做到,但反之则不行;<br><br> PS:指针取值有两种方式,一种是*p,另一种是p[i]查看全部
-
如果指针p已指向数组中的一个元素,则p+1(p++)指向同一数组中的下一个元素,而不是将p的值简单的加1。 p += 3 表示将指针向下移动3个元素。<br>查看全部
-
gdb命令 x/10d 起始地址 从起始位置向后取10个值(10),以10进制输出(d)查看全部
-
静态变量 static关键字。函数调用结束后,静态变量的值不消失。对一个C文件里的全局变量和函数加入static的申明 可以防止被其他C文件误调用,即限定作用域只是当前文件,其他文件中即使有同名变量和函数也不影响。查看全部
-
1.GCC会对内存变量分配进行优化:同一种变量类型会放到一块儿!<br><br><br> 2.静态变量、常量、全局变量存于内存的数据段(数据段位置高于代码段)。<br><br> 3.64位计算机中:地址都是用64bit表示的,所以指针(存储地址)占64bit,即8字节。<br><br> 注意图中:&pa -> &pb的确是增加了8个字节(16进制中满16进1);<br> 4.栈分配内存是由高位到地位 代码段的内存分配是由低到高查看全部
-
代码段在低地址段<br> 桟记录你执行的代码<br> 变量就是和名字一样,只是一个代号,其本质就是内存!存在桟里<br> <br> 记录在栈内存中<br> 调用函数和其运行到第几行<br> 有哪些变量,变量的值<br> <br> 栈从上往下,从大的地址往小的放入<br> <br> p &a 就可以知道a的地址在哪里<br> <br> 指针保存的是内存地址<br>本质就是地址 如图<br> *p = &a<br> &a是地址,p是记录a的地址,p是另一个柜子查看全部
-
高位内存空间分配给操作系统内核使用,低位内存空间分配给用户程序使用。 用户程序的内存空间从低到高又划分为:代码段、数据段、堆、自由可分配内存和栈。 我们编写的函数在编译后存到磁盘,运行程序时,就把源代码编译后的二进制数据加载到内存空间中的代码段中。声明的全局变量或常量放置在数据段。每次调用新的函数,就将新的函数压入栈区。查看全部
-
若某一个地址不足64位,只是表示残缺的尾数都是前面的0,比如:5685125即0000000005685125 1.注意地址和内存空间的对应。 2.64bit操作系统中0~0*7fffffffffff(11个f)是留给用户/程序员使用的,剩余的0*7fffffffffff~0*ffffffffffffffff是供操作系统调用的)。 3.用户的内存隔离:将应用程序和操作系统的内存隔离开是有好处的,使操作系统更加安全! 4.32bit的计算机最多使用4G的内存!查看全部
-
尽管用户的内存用完了,操作系统的内存还在,就可以使用操作系统关闭用户程序的内存使用查看全部
-
&a a 代表的内存地址 *a 代表的是这个内存地址所赋的值 *a = *b 表示b地址所赋的值替换a地址所赋的值查看全部
-
使用gdb调试步骤: 1、使用带-g选项的gcc命令编译源文件:gcc -g main.c -o main.out 2、使用gdb工具调试:gdb ./main2.out 3、调试过程中:(gdb): l 列出当前项目源代码(list)→再按l或直接按回车:继续执行上一命令 break 12 将断点打在第12行 start 单步调试 p a 显示当前a的值(print)(当前行的命令未完全执行) n 进入下一行(next) s 进入当前函数内部(step) bt 查看函数堆栈(在上方的函数先执行) f 1 切换到1号栈 q 退出调试查看全部
-
指针变量 定义int *a 地址符号&a查看全部
-
char *p="hello world"; 这段字符串是存储在内存 代码段中的,不允许被修改查看全部
-
内存分配查看全部
举报
0/150
提交
取消