zoukankan      html  css  js  c++  java
  • 2018.8.8笔记

    void print(int a[2], int n){//OK,数组退化为指针

    }

    void print(int a[0], int n){//错

    }

    数据类型的本质:固定内存大小块的别名

    const vector<int>::iterator iter
    *iter = 10;
    vector<int>::const_iterator iter
    iter++

    1,const static float cfx = 30
    2,void func() const{}
    3,函数重载
    void func() const{}
    void func(){}
    void func(int x){}
    void func(const int x){}//这个不是重载,编译报错,函数已存在

    2018.8.8
    程序生成过程:
    预编译-处理#相关的,包括#include
    编译-将源文件编译成汇编代码
    汇编-将汇编代码一一对应的翻译成机器码,生成obj文件
    每个生成的obj文件都包含了: 代码段,数据段等,见如下obj文件格式
    链接-将obj拼接起来,去掉多余信息,生成可行文件
    由于每个obj中都有代码段,数据段等,因此链接过程中要进行合并

    obj与exe格式几乎相同,有一些链接信息:如动态链接库信息等

    obj文件格式:
    文件头
    .data 数据段 可读可写
    .text 代码段 只读
    .rodata 只读数据段 const 等
    .bss 未初始化的全局变量记录段(并不占物理内存,占虚拟空间)
    .debug 调试信息
    .dynamic 动态链接库信息
    .symtab 符号表,就是程序中用到的变量的名字,局部的及全局的,编译器生成的,如段名等
    链接报错时,错误信息大概就是这个符号表的东西吧
    .其它


    为什么要将代码段与数据段独立开?
    1,代码是只读的,数据是可写的,必须分开
    2,多个实例使用的代码,不同的数据
    3,局部访问性原理,可提高缓存命中率

    动态链接与静态链接
    静态链接:此时静态库就像一个obj文件一样被缝合进了EXE
    试想若每个程序都把系统的库静态链接入自己中,N个程序将复制N份系统库,运行时将重复大量的内存
    而动态链接库则是共享库只加载一份到内存中,各程序共同使用它。
    因为每个进程都有自己的虚拟空间,这个空间就是CPU的寻址范围,32位CPU,寻址能力是4GB,
    就是说32位CPU上,每个进程的虚拟内存都是4GB
    那么,由于动态链接库不是缝合到EXE中的,因此也不能映射到EXE的进程中,
    故,动态链接库加载到内存中时也是有独立的虚拟空间的,
    这就引出了一个著名问题:跨链接库 NEW/DELETE的问题,
    在一个DLL中用NEW申请内存,在另一个DLL或EXE中 DELETE释放内存可能会出现问题,

    计算机存储分类:
    1,寄存器: CPU内的器件,速度最快的存储器
    2,RAM: random access memory,由触发器矩阵组成,每8个为一组,构成一个字节
    触发器由电容构成,上电表示1,无电表示0,因此RAM即内存断电数据丢失
    2.1 dram : 动态RAM,就是常说的内存,因为需要定时刷新(上电),故称为动态内存
    2.2 sram : 静态RAM, 就是常说的cache,因为它不需要刷新(上电),因此速度比内存更快
    3,ROM: 只读存储器
    4,磁盘,也称硬盘,它真是与磁有关:在金属表层涂上磁层来存储信息
    磁道非常细小,肉眼不可见,一个盘片有上万个磁道。
    多个盘片组成一个圆柱结构,构成磁盘
    磁盘是靠转动配合磁头移动来定位并读写数据的,显然这种机械运动比内存的电信号速度差太多了

  • 相关阅读:
    Linux 共享库
    使用Visual Studio(VS)开发Qt程序代码提示功能的实现(转)
    ZOJ 3469 Food Delivery(区间DP)
    POJ 2955 Brackets (区间DP)
    HDU 3555 Bomb(数位DP)
    HDU 2089 不要62(数位DP)
    UESTC 1307 windy数(数位DP)
    HDU 4352 XHXJ's LIS(数位DP)
    POJ 3252 Round Numbers(数位DP)
    HDU 2476 String painter (区间DP)
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/9444526.html
Copyright © 2011-2022 走看看