内存操作,指针,易变的--FW

2023-12-13 08:23:50
  1. 内存操作
    https://blog.csdn.net/m0_62599305/article/details/134188896
    内存的申请和释放(malloc、free、realloc、calloc)
    malloc(memory allocation), 用于分配一块指定大小的内存块,并返回一个指向该内存块的指针。你需要提供要分配的内存块的大小(以字节为单位)。如果分配成功,它将返回指向新内存的指针, 否则返回null.
    void * malloc( size_t size);
    int *pInt;
    int size =5;
    pInt= (int *)malloc(size * sizeof(int));//分配5个整数的内存块。

char *pChar;
char size = 5;
pChar = (char *) malloc(size * sizeof(char));

*void free(void ptr)
free函数用于释放之前malloc, calloc & realloc分配的内存。它接受一个指向要释放的内存块的指针作为参数。成功释放内存后,指针不再指向任何内存。

  1. 内存问题
    内存溢出(out of memory)是指程序在申请内存时,没有足够的内存空间拱其使用,系统已经不能再分配出你需要的空间。
    内存泄漏(memory leak)是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏危害可以忽略,但是内存泄漏次数多了就会导致内存溢出。

  2. 指针
    https://blog.csdn.net/qq_48892708/article/details/129890157
    指针是一个变量,它存储的是一个内存地址。这个地址指向的是另一个变量或数据的位置,也就是说,指针可以直接访问内存中的数据。在C语言中,我们可以通过指针来实现参数传递、动态内存分配、数组的操作等。

  3. volatile, 易变的.
    PC:
    内存可见性:保证变量的可见性,当一个备volatile关键字修饰的变量被一个线程修改的时候,其他线长可以立刻得到修改之后的结果。
    工作过程:当一个线程向被volatile关键字修饰的变量写入数据的时候,虚拟机会强制新值刷新到主内存中。当一个线程用到被volatile关键字修饰的值的时候,虚拟机会强制要求它从内存中读取数值
    MCU:
    一个变量用volatile关键字修饰,是要告诉编译器,这个变量的值随时可能发生变化,所以编译器每次都必须从变量对应的内存地址中获取该变量的值。
    当一个变量表示某寄存器的值时,需要用volatile修饰,这样编译器就并不会优化。所谓优化,就是每次去读取寄存器里的数据,作为这个变量的值。问题在于,如果程序中已经改变了该变量的值,那么就会导致这个变量值跟寄存器里面的值不一样,从而导致冲突,用volatile就会避免这个问题,因为不会再去寄存器读取数据作为该变量的值了,而是直接去变量对应的内存地址去找。

文章来源:https://blog.csdn.net/weixin_39305628/article/details/134941440
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。