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为要回收的空间的首地址

  • 相关阅读:
    TweenMax参数补充
    jQuery.lazyload详解
    js函数和jquery函数详解
    数数苹果手机中的不科学
    网页全栈工程师要点分析
    瞄了一眼墙外的世界,只能给差评
    脑洞大开的自然语言验证码
    别再迷信 zepto 了
    产品列表页分类筛选、排序的算法实现(PHP)
    大学回顾和C与PHP之路
  • 原文地址:https://www.cnblogs.com/LinxiHuang/p/9245879.html
Copyright © 2011-2022 走看看