zoukankan      html  css  js  c++  java
  • 在linux上编译C

    1. 写好源代码后,使用gcc编译器来编译
    通过函数来查找所需包含的头文件
    man 2/3 函数名 // man 2 一般用于查找linux系统里的函数
    // man 3 是C通用的函数
    通过头文件来查找头文件里声明的函数
    man 头文件名 // 如 man stdio.h
    gcc test.c //编译test.c里的代码,默认生成可执行文件 a.out
    gcc test.c -o myexe //指编译生成的可执行文件名为myexe
    执行: ./myexe 或者 路径/myexe
    2. 计算机中的内存.
    一个程序需要执行起来,需要把整个程序镜像(可执行文件)加载到内存上。 而且执行中的程序中的变量也需在内存里分配空间 
    程序: 就是编译出来的可执行文件
    进程: 处于执行状态的程序叫进程, 一个程序可以有多个进程
    在代码里:
    int aaa; //意味着需要在内存里划分出4字节空间用于存放变量aaa的值, 划分出来的空间的地址就是&aaa.
    一个程序镜像,会成好多个段,其中有几个段是我们要了解的:
    反汇编可执行文件: objdump -D 可执行文件
    objdump -D 可执行文件 | less
    在函数体内声明出来的变量,它的作用域只能在此函数体里,这种变量叫局部变量
    在函数体外声明出来的变量,它的作用域是整个程序, 这种变量叫全局变量
    静态变量,如果是在函数内部声明,它的作用域只能在此函数内部,只会初始化一次.
    静态变量如果是在函数外部声明的,它的作用域只能在此源文件里.
    代码段(.text): 在程序中某个位置开始的区域专门存放代码生成的机器指令. 我们写的代码编译完成后,都是放在代码段
    数据段(.data): 存放已初始化的全局变量与静态变量. 数据段所需的空间在编译时就会分配出来.
    只读数据段(.rodata): 存放只读的数据. 只读数据所需的空间也是在编译时就会由编译器分配出来的
    未初始化数据段(.bss): 没有初始化的全局变量与静态变量(赋0值也是不算初始化). bss段所需的空间在编译时没有分配,直到程序加载到内存时,系统才会给进程分配出来

    栈:是系统划分出来的一个区域, 是所有进程共用的空间,专用于局部变量空间的分配. 每个进程在栈都只能使用限定的大小空间(不能超过12M, 超出会发出段错误). 栈是从高地址往低地址分配空间的
    堆: 也是系统划分出来的一个区域,用于所有进程动态申请的空间.每个进程申请的空间大小没有限制,只要系统还有空闲的内存就可以.堆是从低地址往高地址分配空间的

    局部变量: 只有在代码执行时才会分配空间, 局部变量在栈里分配空间, 在所属的函数执行结束时回收空间.C语言里在堆动态申请空间,使用malloc()函数。动态申请出来的空间不再使用时,应使用free()函数回收.
    "&" 取地址符号, "&变量名"
    "*指针变量名" : 取指针变量存放的地址上存放的值
    指针也是变量中的一种, 用于存放其它变量的地址或动态申请出来的空间的首地址. 指针本身也需要占用内存空间, 也就是有占用内存地址

    int num = 99; //在内存上分4字节空间,空间的首地址为&num, 此空间上存放的值为99
    int *p = # //声明一个指针变量p, p存放的值就是变量num的地址
    &p : 取指针变量本身的地址
    p : 取指针变量存放的值,也就是存放的其它变量的地址
    *p : 取指针变量存放的地址(&num)上面存放的值(num)

    void *malloc(size_t size); //在堆里申请size字节空间大小
    返回值类型为: void *(通用类型的地址,用任何类型的指针变量都可以接收返回值).
    返回值为申请出来的空间的首地址

    void free(void *ptr); //释放申请出来的内存, ptr为要回收的空间的首地址

  • 相关阅读:
    hdu 1199 Color the Ball 离散线段树
    poj 2623 Sequence Median 堆的灵活运用
    hdu 2251 Dungeon Master bfs
    HDU 1166 敌兵布阵 线段树
    UVALive 4426 Blast the Enemy! 计算几何求重心
    UVALive 4425 Another Brick in the Wall 暴力
    UVALive 4423 String LD 暴力
    UVALive 4872 Underground Cables 最小生成树
    UVALive 4870 Roller Coaster 01背包
    UVALive 4869 Profits DP
  • 原文地址:https://www.cnblogs.com/LinxiHuang/p/9245879.html
Copyright © 2011-2022 走看看