day1(笔记)

发布时间 2023-07-07 00:00:51作者: 歪爱慕外
sizeof的常用用法:
   1、sizeof(arr) 类型*个数/int*p=arr sizeof(p) 只能是4或8   
      2、sizeof(arr[0])   
   3、sizeof(arr)/sizeof(arr[0])
        *sizeof括号里不运算,结果是最大的
     *变长数组不能初始化
*实参与形参之间是以赋值的方式进行传递数据的,并且是单向值传递     数组作为参数传递时,是"址传递"(首地址),相当于调用者与函数共享数组
****使用堆内存时需要注意的问题:****
            内存泄漏:
                内存无法使用,也无法被释放,当再次需要时只能重新申请,然后又重复以上过程,日积月累后会导致系统中可用的内存越来越少  
                (程序一旦结束,属于它的所有资源都会被操作系统回收)
                *如何尽量避免内存泄漏:
                    谁申请的谁释放,谁知道该释放谁释放
                *如何判断定位内存泄漏:
                    1、查看内存的使用情况
                    2、代码分析工具mtrace,检查malloc、free的使用情况
                    3、封装新的malloc和free函数,记录调用信息到日志中
            内存碎片:
                已经被释放但是又无法继续使用的内存叫做内存碎片,是由于申请和释放的时间不协调导致的,内存碎片无法避免只能尽量减少
   *堆内存*
              1、堆内存是进程的一个内存段(text、data、bss、stack、heap)
              2、由程序员手动管理
              3、特点是足够大,缺点是使用麻烦
      *为什么要使用堆内存:
              1、随着程序的复杂数据量变多
              2、其它内存段的申请和释放不受控制,堆内存的申请释放受控制             
      缓冲区机制可以提高数据的读写速度,还可以让低速的设备与高速的CPU之间系统工作
      程序要显示的数据并不会立即显示到屏幕上,而是先存储到输出缓冲区中,当满足一定条件时才会从输出缓冲区显示到屏幕上
          *1、遇到'\n'
              printf("------\n");
          *2、遇到输入语句
              printf();
              scanf();
          *3、当缓冲区满了4k
          *4、程序正常结束时
          *5、fflush(stdout); 手动刷新输出缓冲区