精华内容
下载资源
问答
  • 内存的初始化

    千次阅读 2017-03-29 10:23:13
    内存的初始化

    内存的分类

    内存由于具备访问速度快,访问方式简单等优点,成为了PC或者是嵌入式硬件平台上不可或缺的元件。在开始学习如何使用内存之前,非常有必要先了解一下内存的分类:

    这里写图片描述

    DRAM:它的基本原件是小电容,电容可以在两个极板上保留电荷,但是需要定期的充电(刷新),否则数据会丢失。缺点:由于要定期刷新存储介质,存取速度较慢。

    SRAM:它是一种具有静止存取功能的内存,不需要定期刷新电路就能保存它内部存储的数据。其优点:存取速度快; 但是缺点是:功耗大,成本高。常用作存储容量不高,但存取速度快的场合,比如stepping stone。

    在嵌入式硬件体系中,除了CPU内部的“垫脚石”采用SRAM外,板载内存一般会采用DRAM,而DRAM又可以分为SDRAM,DDR,DDR2等。

    SDRAM(Synchronous Dynamic Random AccessMemory):同步动态随机存储器
    同步: 内存工作需要有同步时钟,内部的命令的发送与数据的传输都以该时钟为基准。
    动态:存储阵列需要不断的刷新来保证数据不丢失。
    随机:是指数据不是线性依次存储,而是自由指定地址进行数据读写。

    DDR (Double Data Rate SDRAM),即“双倍速率同步动态随机存储器”。与早期的SDRAM相比,DDR 除了可以在时钟脉冲的上升沿传输数据,还可以在下降沿传输信号,这意味着在相同的工作频率下,DDR 的理论传输速率为SDRAM的两倍。DDR2 则在DDR 的基础上再次进行了改进,使得数据传输速率在DDR 的基础上再次翻倍。

    内存的内部结构

    表结构:
    内存的内部如同表格,数据就存放在每个单元格中。数
    据读写时,先指定行号(行地址),再指定列号(列地
    址) ,我们就可以准确地找到所需要的单元格。而这张表格的称为:Logical Bank(L-Bank)。

    这里写图片描述

    由于技术、成本等原因,一块内存不可能把所有的单元格都做到一个L-Bank,现在内存内部基本都会分割成4个L-Bank。

    这里写图片描述

    需要向芯片提供以下3个信息来做到寻址:
    1、L-Bank选择信号
    2、行地址
    3、列地址

    OK6410开发板上的内存资源:
    128M字节Mobile DDR内存。
    2片KSX51163PC芯片:
    每一片为:32M*16,总共128M

    上面的16有两重含义:1、每个内存单元的大小为16位; 2、内存芯片的数据宽度为16位。ARM芯片的数据线为32位,剩下的16位连入另一个内存芯片。

    这里写图片描述
    4 * 2^13 * 2^10 = 32M

    2440内存初始化

    2440开发板配置的是SDRAM内存。

    S3c2440芯片对外提供的引脚上,只给出了27根地址线Addr[0:26]。单靠芯片上的 27 根引脚,它只能访问128M 的外设空间。

    为了扩大外设的访问范围,S3c2440芯片又提供了8个片选信号nGCS0~nGCS7。当某个片选信号nGCSx有效时,则可以通过27根地址线去访问对应这个片选的128MB空间。由于有8个片选,所以2440芯片能访问的外设空间总共为8*128MB=1GB。而1G (0x40000000)以上的空间,则安排给了2440内部的寄存器,访问这些内部的寄存器,则是通过32位的处理器内部总线来完成的。

    这里写图片描述

    一般把内存放置在片选6和片选7的位置,因此编写程序时,内存的起始地址为0x30000000。

    这里写图片描述

    对于某一个地址,首先有存储控制器进行分解,然后对相应的存储设备进行操作。因此,对内存的初始化,其实就是对存储控制器的初始化。

    初始化存储寄存器:(mini2440开发板)

    #define mem_contrl 0x48000000
    init_sdram:
        ldr r0, =mem_contrl 
        add r3, r0, #4*13 @最后一个地址
        adrl r1, mem_data
    
    0:
        ldr r2, [r1], #4 @加载并且更新地址
        str r2, [r0], #4 @存储并且更新地址
        cmp r0, r3
        bne 0b           @不等于就跳到分支
        mov pc, lr
    
    mem_data:
        .long 0x22000000 
        .long 0x00000700
        .long 0x00000700
        .long 0x00000700
        .long 0x00000700
        .long 0x00000700
        .long 0x00000700
        .long 0x00018001
        .long 0x00018001
        .long 0x008c04f5
        .long 0x000000b1
        .long 0x00000030
        .long 0x00000030

    6410内存初始化

    6410开发板配置的是DDR内存。

    S3C6410处理器拥32位地址总线,其寻址空间为4GB。其中高2GB为保留区,低2GB区域又可划分为两部分:主存储区和外设区。

    这里写图片描述

    保留区没有使用。外设区放置6410芯片中的寄存器,访问这些内部寄存器就通过这些地址。主存储区

    主存储区的划分:

    这里写图片描述

    boot启动镜像区:
    这个区域的作用正如它的名字所述,是用来启动ARM系统的。但是这个区域并没有固定的存储 介质与之对应。而是通过修改启动选项,把不同的启动介质映射到该区域。比如说选择了IROM 启动方式后,就把IROM映射到该区域。

    内部存储区:
    这个区域对应着内部的内存地址,iROM和SRAM都是分布在这个区间。0x08000000~0x0bffffff对应着内部ROM,但是IROM实际只有32KB,选择从IROM启动的时候,首先运行就是这里面的程序BL0,BL0这部分代码由三星固化。0x0c000000~0x0fffffff对应内部SRAM,实际就是8KB的Steppingstone。

    静态存储区:
    这个区域用于访问挂在外部总线上的设备,比如说NOR flash、oneNand等。这个区域被分割为6个bank,每个bank为128MB,数据宽度最大支持16bit,每个bank由片选Xm0CS[0]~Xm0CS[5] 选中。

    动态存储区:
    该区域从0x50000000~0x6fffffff,又分为2个区间,分别占256MB,可以片选Xm1CS[0]~Xm1CS[1]来进行着2个区间的选择。我们6410开发板上256MB的DDR内存就安排在这个区域,这也就是为什么6410的内存地址是从0x50000000开始的原因。

    内存芯片的连接方式:
    这里写图片描述

    6410芯片手册中的存储控制器
    芯片手册第5章,DRAM CONTROLLER

    5.4节介绍了内存控制器初始化的流程。

    uboot代码中的cpu\s3c64xx\s3c6410文件下的cpu_init.S文件下的标号mem _ ctrl _ asm _ init下的代码就是对存储控制器进行初始化的代码。

    代码举例:(OK6410开发板)

    .text
    .global mem_init
    mem_init:
    
        ldr r0, =0x7e00f120 @设置数据线
        mov r1, #0x8
        str r1, [r0]
    
        ldr r0, =0x7e001004  @make DRAM Controller enter ‘Config’ state
        mov r1, #0x4         
        str r1, [r0]
    
        ldr r0, =0x7e001010  @鍒锋柊瀵勫瓨鍣ㄥ湴鍧€
        ldr r1, =( ( 7800 / ( 1000000000/133000000 ) + 1 ) )      @璁剧疆鍒锋柊鏃堕棿
        str r1, [r0]
    
        ldr r0, =0x7e001014  @CAS latency瀵勫瓨鍣?
        mov r1, #(3 << 1)
        str r1, [r0]
    
        ldr r0, =0x7e001018  @t_DQSS瀵勫瓨鍣?
        mov r1, #0x1
        str r1, [r0]
    
        ldr r0, =0x7e00101c  @T_MRD瀵勫瓨鍣?
        mov r1, #0x2
        str r1, [r0]
    
        ldr r0, =0x7e001020   @t_RAS瀵勫瓨鍣?
        ldr r1, =( ( 45 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e001024   @t_RC瀵勫瓨鍣?
        ldr r1, =( ( 68 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e001028   @t_RCD瀵勫瓨鍣?
        ldr r1, =( ( 23 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e00102c   @t_RFC瀵勫瓨鍣?
        ldr r1, =( ( 80 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e001030   @t_RP瀵勫瓨鍣?
        ldr r1, =( ( 23 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e001034   @t_rrd瀵勫瓨鍣?
        ldr r1, =( ( 15 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e001038   @t_wr瀵勫瓨鍣?
        ldr r1, =( ( 15 / ( 1000000000 / 133000000 ) + 1 ) )
     @  ldr r2, [r0]
        str r1, [r0]
    
        ldr r0, =0x7e00103c   @t_wtr瀵勫瓨鍣?
        mov r1, #0x07
        str r1, [r0]
    
        ldr r0, =0x7e001040   @t_xp瀵勫瓨鍣?
        mov r1, #0x02
        str r1, [r0]
    
        ldr r0, =0x7e001044   @t_xsr瀵勫瓨鍣?
        ldr r1, =( ( 120 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e001048   @t_esr瀵勫瓨鍣?
        ldr r1, =( ( 120 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e00100c   @鍐呭瓨鎺у埗閰嶇疆瀵勫瓨鍣?
        ldr r1, =0x00010012   @閰嶇疆鎺у埗鍣?
        str r1, [r0]
    
        ldr r0, =0x7e00104c   @32浣岲RAM閰嶇疆鎺у埗瀵勫瓨鍣?
        ldr r1, =0x0b45
        str r1, [r0]
    
        ldr r0, =0x7e001200   @鐗囬€夊瘎瀛樺櫒
        ldr r1, =0x150f8
        str r1, [r0]
    
        ldr r0, =0x7e001304   @鐢ㄦ埛閰嶇疆瀵勫瓨鍣?
        mov r1, #0x0
        str r1, [r0]
    
        ldr r0, =0x7e001008   @从这一步开始,初始化内存,设置mem_cmd为nop
        ldr r1, =0x000c0000
        str r1, [r0]
    
        ldr r1, =0x00000000   @‘Prechargeall’ 
        str r1, [r0]
    
        ldr r1, =0x00040000   @‘Autorefresh’2次
        str r1, [r0]
        str r1, [r0]
    
        ldr r1, =0x000a0000   @MRS
        str r1, [r0]
    
        ldr r1, =0x00080032   @Mode Reg
        str r1, [r0]
    
        ldr r0, =0x7e001004   @memc_cmd‘3’b000’
        mov r1, #0x0          @DRAM Controller enter ‘Ready’ state
        str r1, [r0]
    
    check_dmc1_ready:         @检查内存状态 ‘2’b01’, which means'Ready’
        ldr r0, =0x7e001000 
        ldr r1, [r0]
        mov r2, #0x3
        and r1, r1, r2
        cmp r1, #0x1
        bne check_dmc1_ready
        nop
        mov pc, lr

    210内存初始化

    210开发板配置的是DDR2内存。
    这里写图片描述

    内存起始地址为0x20000000

    210开发板的内存通常采用8片或者4片128M*8bit芯片级联的办法。

    代码举例(OK210开发板)

    #define DMC_PHYCONTROL0 0xf0000018
    #define DMC_PHYCONTROL1 0xf000001c
    #define DMC_CONCONTROL  0xf0000000
    #define DMC_MEMCONTROL  0xf0000004
    #define DMC_MEMCONFIG0  0xf0000008
    #define DMC_MEMCONFIG1  0xf000000c
    #define DMC_PRECHCONFIG 0xf0000014
    #define DMC_TIMINGAREF  0xf0000030
    #define DMC_TIMINGROW   0xf0000034
    #define DMC_TIMINGDATA  0xf0000038
    #define DMC_TIMINGPOWER 0xf000003c
    #define DMC_PHYSTATUS   0xf0000040
    #define DMC_DIRECTCMD   0xf0000010
    #define DMC_PWRDNCONFIG 0xf0000028
    
    #define DMC0_MEMCONTROL         0x00202400
    #define DMC0_MEMCONFIG_0        0x20F00313  
    #define DMC0_MEMCONFIG_1        0x00F00313  
    
    #define DMC0_TIMINGA_REF        0x00000618
    #define DMC0_TIMING_ROW         0x2B34438A
    #define DMC0_TIMING_DATA        0x24240000
    #define DMC0_TIMING_PWR         0x0BDC0343      
    
    .globl mem_init
    mem_init:
        @ step 2.1
        ldr r0, =DMC_PHYCONTROL0
        ldr r1, =0x00101000             
        str r1, [r0]
    
        @ step 2.2
        ldr r0, =DMC_PHYCONTROL0
        ldr r1, =0x00101002                 
        str r1, [r0]
    
        @ step 4
        ldr r0, =DMC_PHYCONTROL0
        ldr r1, =0x00101003                 
        str r1, [r0]
    
        @ step 5
        ldr r0, =DMC_CONCONTROL             
        ldr r1, =0x0FFF1350
        str r1, [r0]
    
        @ step 6
        ldr r0, =DMC_MEMCONTROL
        ldr r1, =DMC0_MEMCONTROL                
        str r1, [r0]
    
        @ step 7
        ldr r0, =DMC_MEMCONFIG0
        ldr r1, =DMC0_MEMCONFIG_0               
        str r1, [r0]
    
        @ step 8
        ldr r0, =DMC_PRECHCONFIG
        ldr r1, =0xFF000000                 
        str r1, [r0]
    
        @ step 9.1
        ldr r0, =DMC_TIMINGAREF
        ldr r1, =DMC0_TIMINGA_REF               
        str r1, [r0]
    
        @ step 9.2
        ldr r0, =DMC_TIMINGROW
        ldr r1, =DMC0_TIMING_ROW                
        str r1, [r0]
    
        @ step 9.3
        ldr r0, =DMC_TIMINGDATA
        ldr r1, =DMC0_TIMING_DATA               
        str r1, [r0]
    
        @ step 9.4
        ldr r0, =DMC_TIMINGPOWER
        ldr r1, =DMC0_TIMING_PWR                
        str r1, [r0]
    
        @ step 11
    wait_lock:
        ldr r0, =DMC_PHYSTATUS 
        ldr r1, [r0]            
        and r2, r1, #0x4
        cmp r2, #0x4                    
        bne wait_lock
    
        @ step 14
        ldr r0, =DMC_DIRECTCMD
        ldr r1, =0x07000000                 
        str r1, [r0]
    
        @ step 16
        ldr r1, =0x01000000                 
        str r1, [r0]
    
        @ step 17
        ldr r1, =0x00020000                 
        str r1, [r0]
    
        @ step 18
        ldr r1, =0x00030000                 
        str r1, [r0]
    
        @ step 19
        ldr r1, =0x00010400                 
        str r1, [r0]
    
        @ step 20
        ldr r1, =0x00000542                 
        str r1, [r0]
    
        @ step 21
        ldr r1, =0x01000000                 
        str r1, [r0]
    
        @ step 22.1 
        ldr r1, =0x05000000                 
        str r1, [r0]
    
        @ step 22.2
        ldr r1, =0x05000000                 
        str r1, [r0]
    
        @ step 23
        ldr r1, =0x00000442                 
        str r1, [r0]
    
        @ step 25.1
        ldr r1, =0x00010780                 
        str r1, [r0]
    
        @ step 25.2
        ldr r1, =0x00010400                 
        str r1, [r0]
    
        @ step 26, repeat step14~step25
        ldr r1, =0x07100000                 
        str r1, [r0]
    
        ldr r1, =0x01100000                 
        str r1, [r0]
    
        ldr r1, =0x00120000                 
        str r1, [r0]
    
        ldr r1, =0x00130000                 
        str r1, [r0]
    
        ldr r1, =0x00110400                 
        str r1, [r0]
    
        ldr r1, =0x00100542                 
        str r1, [r0]
    
        ldr r1, =0x01100000                 
        str r1, [r0]
    
        ldr r1, =0x05100000                 
        str r1, [r0]
    
        ldr r1, =0x05100000                 
        str r1, [r0]
    
        ldr r1, =0x00100442                 
        str r1, [r0]
    
        ldr r1, =0x00110780                 
        str r1, [r0]
    
        ldr r1, =0x00110400                 
        str r1, [r0]
    
        @ step 27
        ldr     r0, =DMC_CONCONTROL
        ldr r1, =0x0FF02030                 
        str r1, [r0]
    
        ldr     r0, =DMC_PWRDNCONFIG
        ldr r1, =0xFFFF00FF                 
        str r1, [r0]
    
        ldr     r0, =DMC_CONCONTROL
        ldr r1, =0x00202400                 
        str r1, [r0]
    
        mov pc, lr
    展开全文
  • DDR3内存的初始化过程

    千次阅读 2019-08-05 13:41:50
    DDR3内存的初始化过程在JEDEC有详细的介绍,我看的是Hynix的文档,内容大同小异。 不过初始化过程要对照着图片来看,细心点就能理解。 初始化过程如下: 1.首先上电(RESET#推荐保持在 0.2XVDD;其他的输入没有...

    DDR3内存的初始化过程在JEDEC有详细的介绍,我看的是Hynix的文档,内容大同小异。

    不过初始化过程要对照着图片来看,细心点就能理解。

    DDR3内存的初始化过程
    初始化过程如下:

    1.首先上电(RESET#推荐保持在 0.2XVDD;其他的输入没有定义)。RESET#信号需要用稳定电源保持最少200us。在图中可以看出来,CKE需要在RESET#拉高之前被拉低,且最少维持10ns。

     

    2. 在RESET#被拉高之后,需要等待500us直到CKE被拉高。在这段时间内,DRAM会开始内部状态的初始化,这个过程是独立于外部时钟完成的。

     

    3.在CKE拉高之前,时钟(CK,CK#)必须开始且稳定至少10ns或5个tCK。图中可以看到一个tIS时间,这个时间是CKE关于时钟的setup时间,因为CKE是一个同步信号。在CKE拉高之前且使用tIS设定自己的同时,NOP和Deselect命令也必须registed。在Reset之后当CKE拉高,CKE就必须持续拉高直到初始化过程结束。图中可以看到CKE持续拉高到tDLLK和tZQinit都截止的时候。

     

    4.在Reset#拉低的时候,DDR3 SDRAM的ODT一直保持高阻态。除此之外,ODT还在RESET#拉高到CKE变高这段时间维持了高阻态。在tIS之前,ODT的输入信号可能在一个未定义的状态。在CKE拉高之后,ODT的输入信号不会变化,一直处于LOW或者HIGH的状态。若是在MR1中设置打开了RTT_NOM,ODT输入信号会处于LOW状态。总的来看,ODT输入信号会维持不动直到初始化过程结束,直到tDLLK和tZQinit截止。

     

    5. 在CKE拉高之后,在发送第一个MRS命令到load mode register之前,需要等待tXPR,这个时间是RESET CKE的exit时间。(tXPR公式: tXPR=Max(tXS,5x tCK))

     

    6. 发送MRS命令给MR2(BA0,2=0 and BA1=1)

     

    7. 发送MRS命令给MR3(BA2=0 and BA0,1=1)

     

    8. 发送MRS命令给MR1 且激活DLL(发送DLL enable命令,需要A0=0,BA0=1且BA1,2=0)

     

    9.发送MRS命令给MR0且 RESET DLL(发送DLL RESET命令,需要A8=1,BA0,1,2=0)

     

    10. 发送ZQCL命令开始ZQ校准过程。

     

    11. 等待tDLLK和tZQinit完成。

     

    12. DDR3 SDRAM可以开始进行一般操作了。

    展开全文
  • C语言内存的初始化

    千次阅读 2016-05-08 02:17:47
    我们编写C语言时候需要给变量申请一块内存区域,当我们创建一个内存区域时候,内存数据十有八九是乱七八糟(因为其他代码用过后遗留数据并没有及时清掉) 例如: int main() { char str[10];//分配...

    我们编写C语言的时候需要给变量申请一块内存区域,当我们创建一个内存区域的时候,内存中的数据十有八九是乱七八糟的(因为其他代码用过后遗留的数据并没有及时清掉)

    例如:

     

    int main()
    {
        char str[10];//分配的10个字节的内存可能被用过;
        printf("%s\n",str);//这个代码打印出来的可能就是乱码,因为printf的%s是“打印一直遇到'\0'"
        return 0;
    }

     

    那么,有什么方法可以解决呢?

     

    这里有两种解决问题的方法:

    第一种:使用memset函数为新申请的内存做初始化工作

     

    memset(void*,要填充的数据,要填充的字节个数)

     

     

    int main()
    {
        char str[10];//编译器自动分配10个字节的内存大小
        memset(str,0,sizeof(str));//sizeof()计算字节大小
        printf("%s\n",str);
        return 0;
    }

     

     

    第二种:

    char str[10] ={0}; 对于长度为10字节的这段内容全部填充为0。原理:int num[10]={6,8,5};//前三个分别填充6、8和5,之后都填充为0;

     

    最后补充:

    void *memset(void *str, int ch, size_t n);

    函数解释:将str中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 str 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体数组进行清零操作的一种最快方法。

    memset是计算机中C/C++语言函数。将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针

     

    展开全文
  • 动态分配内存的初始化

    千次阅读 2016-08-12 17:09:00
    内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化。 2)calloc 函数: void *calloc(unsigned int num, unsigned int ...

         在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化。

    2)calloc 函数: void *calloc(unsigned int num, unsigned int size)

         按照所给的数据个数和数据类型所占字节数,分配一个 num * size 连续的空间。

        calloc申请内存空间后,会自动初始化内存空间为 0,但是malloc不会进行初始化,其内存空间存储的是一些随机数据。 
    3)realloc 函数: void *realloc(void *ptr, unsigned int size)

        动态分配一个长度为size的内存空间,并把内存空间的首地址赋值给ptr,把ptr内存空间调整为size。

        申请的内存空间不会进行初始化。
     
    4)new是动态分配内存的运算符,自动计算需要分配的空间,在分配类类型的内存空间时,同时调用类的构造函数,对内存空间进行初始化,即完成类的初始化工作。动态分配内置类型是否自动初始化取决于变量定义的位置,在函数体外定义的变量都初始化为0,在函数体内定义的内置类型变量都不进行初始化。
      即如果是  new()就会初始化,如果是new []不会。 因为前者有函数符号()

    转载于:https://www.cnblogs.com/jinchengsong/p/5765705.html

    展开全文
  • DPDK : 解析内存初始化的过程

    千次阅读 2019-05-01 17:41:09
    这一篇文章主要是对DPDK的EAL(Environment Abstraction Layer)中内存的初始化的解析,这是DPDK内存管理的基础。 注:在DPDK中,初始化由primary process完成,而其他process统称为secondary process,其可以通过读取...
  • 共享内存初始化

    2014-11-08 23:08:00
    现在就来看看共享内存的初始化(过程是非常复杂的,也看了好多次) 1.内存池(其实这个也是放到共享内存里面)ProcessMemPoolEx m_ProcessMemPool; { 其中包括小,中,大三种模式,就以小举个例子 1.是否初始化m_...
  • linux内存管理初始化

    千次阅读 2014-12-28 00:21:08
    对相关数据结构的初始化是从全局启动例程start_kernel开始的。本文详细描述了从bootloader跳转到linux内核内存管理子系统初始化期间所做的操作,从而来加深对内存管理子系统知识的理解和掌握。内核的入口是stext,这...
  • ...C++在new时的初始化的规律可能为:对于有构造函数的类,不论有没有括号,都用...如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的new会在分配内存的同时初始化为0。  
  • Linux的内存初始化

    千次阅读 2019-05-11 20:28:35
    看了很多关于linux内存管理文章还是云里雾里,听了很多关于linux内存管理课程还是一头雾水。其实很多时候造成不懂原因不是资料太少,恰恰是资料太多,而且各个内核版...
  • 动态内存空间初始化方式比较

    千次阅读 2013-06-18 17:10:41
    动态内存空间初始化方式比较 1. 通过下标方式进行初始化; 2. 通过移动指针来进行初始化; /****************** 下标方式 ******************/ #include #include int main(void) { int *p = (int *)...
  • 内存没有初始化内存越界后果

    千次阅读 热门讨论 2010-02-02 10:33:00
    如果你发现你程序在调试器里好好,独立运行会挂,那么恭喜你,99%就是变量没有初始化或者是内存越界。 这次老衲犯白痴。两件都碰上了。上集:首先症状就是Release版本在调试器里跑好好,一到独立运行就挂...
  • 利用cache缓存初始化内存

    千次阅读 2018-07-08 00:58:17
    系统内存的初始化涉及到内存控制器的配置,需要读取DRAM条上EEPROM存储的各种配置参数,动态配置内存控制器。用汇编语言实现稍显复杂,当前的启动引导程序(如uboot)采用C语言实现这部分功能。然而,问题是在内存未...
  • DPDK内存管理二:初始化

    千次阅读 2017-12-29 16:46:30
    DPDK 内存的初始化主要在rte_eal_init()函数中进行: eal_hugepage_info_init() /* 获取系统中hugepage种类以及数量信息到internal_config.hugepage_info,用于后续内存初始化 */ if (internal_config.no_hugetlbfs...
  • linux内存磁盘初始化技术

    千次阅读 2011-08-11 23:22:45
    linux内存磁盘初始化技术 2010-09-25 23:13 转载自 ...linux内存初始化技术(initrd)用于支持两阶段系统引导过程,是在系统启动过程中被挂载临时root文件系统(译者注:这里root文件系统是指
  • 内存初始化代码有感

    千次阅读 2009-12-20 23:34:00
    在这个函数当中使用paging_init() 函数来初始化和映射硬件页表(在初始化前已有 8M内存被映射,在这里不做记录),而 paging_init() 则是调用的pagetable_init() 来完成内核物理地址的映射以及相关内存的初始化。...
  • C++ new 动态内存 对象初始化

    千次阅读 2018-08-21 16:40:57
    User a[2]=User(23,24);这种写法对数组每一个对象调用有参数构造函数,是功能实现最完备形式。 User a(23,24);这种写法可以调用有参数构造函数。...这种写法不初始化,仅分配内存,里面是乱码。 int a=...
  • 内存初始化

    千次阅读 2011-03-09 11:36:00
    文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。 为什么必须管理内存 <br />内存管理是计算机...
  • 转自http://www.cnblogs.com/haore147/p/3647348.html 另一篇好文章... ...c语言中较常见内存分配引起错误_内存越界_内存初始化_内存太小_结构体隐含指针 1.指针没有指向一块合法
  • memset能够对char数组进行内存初始化,但是怎样...有没有比用for循环效率更高的初始化方法呢? 例如这个结构体 typedef struct QueeNode{ int a; int b; int c; int d; int e; int f; int g; double T; }*Quee;
  • 初始化之前的内存layout dpdk得到原始内存是通过mmap大页获得,而这样原始内存分布可以用下图表示(NUMA架构)。关于页表相关知识,可以参加我另外一篇文章(虚拟存储器)。 其中页a、a+1类似表示...
  • CUDA之二维数组分配内存初始化

    千次阅读 2018-10-17 16:38:23
    在GPU中,对一维数组分配内存使用是cudaMalloc函数,但是对于二维数组,使用cudaMalloc来分配内存并不能得到最好性能。...对数组进行初始化应当使用cudaMemset2D,进行内存赋值应当使用cudaM...
  • Linux内存初始化

    万次阅读 2010-08-14 12:10:00
    本文讲述了Android 2.1(Linux2.6.29)内核启动过程中的内存初始化部分。包括如何获取内存大小、分页机制、引导时分配器、每CPU高速缓冲器、伙伴系统及分页管理器等。内容以丰富图示、流程、及源码分析对该部分作了...
  • C++学习之内存的分配和初始化

    千次阅读 2018-10-06 13:46:50
    C++定义了2个运算符来分配和释放动态内存。new分配内存,delete释放内存。 1. 使用new动态分配和初始...默认情况下,动态分配对象是默认初始化,内置类型(int, double)或组合类型(struct)对象值是未定义...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,853
精华内容 20,741
关键字:

内存的初始化