zoukankan      html  css  js  c++  java
  • malloc,colloc,realloc内存分配,动态库,静态库的生成与调用

    

    1.main方法里面直接定义一个很大的数组的时候。可能会出现栈溢出:错误代码演示:

    #include<stdio.h>

    #include<stdlib.h>

    void main()

    {

        int a[1024 * 1024];

        int num = 100;

        system("pause");

    }

    错误截图:

    2.在定义数组的时候要定义数组的长度,否则会出现错误。

    (特例:在GCC编译器下,不会出现错误(由于标准不一样))。

    3.打印而且赋值的是:

    for (int i = 0; i < length;i++)

    {

        printf("%d ",a[i] = i);  //初始数组并打印

    }

    4.内存分配能够通过三个函数实现

    A.void *malloc(size_t size)malloc仅仅管分配,不初始化内容(size:Bytes to allocate:分配的字节数)

    B.void *calloc(size_t,size_t size):分配内存,而且初始化内存信息为0,其有两个參数(num:Number of elements;size:Length in bytes of each element),第一个參数是,开辟的数量,第二个參数是每一个參数的大小。

    C.void *realloc(void *memblock,size_t size);Reallocatememory blocks;用于分配内存.

    memblock:Pointer to previously alloctedmemory block;

    size:New size in bytes

    比如:

    int *p1 = (int*)malloc(sizeof(int)*10);//仅仅管分配。不初始化

    int *p2 = (int*)calloc(10,sizeof(int));//calloc会进行内存清零

     

    样例:

    #include<stdio.h>

    #include <stdlib.h>

     

    int main(int argc, char *argv[])

    {

    //仅仅管分配

        int *p1 = (int *)malloc(sizeof(int)* 10);

        //calloc会进行内存清零

        int *p2 = (int *)calloc(10, sizeof(int));

        printf("%p,%p", p1, p2);

     

        for (int i = 0; i < 10; i++)

        {

            p1[i] = i;

            p2[i] = i;

        }

     

        getchar();

        return 0;

    }

    5.realloc分配内存

    #include <stdio.h>

    #include<stdlib.h>

     

    void main()

    {

        //分配内存

        int *p = (int *)calloc(10,sizeof(int));

        printf("%p ", p);//输出地址

        int i;

        for (i = 0; i < 10;i++)

        {

            //*(p + i)等价于p[i]

            *(p + i) = i;

        }

     

        //变长,第一个參数是指针地址。第二个參数表示的是数组的个数

        int *pnew = (int *)realloc(p,100000);

        //realloc.第一种情况,后面的内存没实用,就直接扩展变长

        //另外一种情况。后面的内存有人用,先分配新的长度,拷贝原来原来的内存,释放原来的内存

        printf("%p",pnew);

        for (int i = 10; i < 25000;i++)

        {

            *(pnew + i) = i;

        }

     

        system("pause");

        return 0;

    }

    6.新建项目dlllib

    编写代码:

    #include<stdio.h>

    #include<stdlib.h>

     

    void go()

    {

        printf("Hello World ");

    }

    7.制作dll,右击项目à属性à配置属性à常规à分别改动配置类型(动态库.dll)和目标文件名称。

    8.制作lib,右击项目à属性à配置属性à常规à分别改动配置类型(动态库.lib)和目标文件名称。

    9.引入lib.lib的方式有

      A:.lib复制到源码所在的文件夹下。à通过代码引入.lib

    代码是:

    #pragma comment(lib,”test.lib”);  //当中test.lib就是要引入的.lib静态库(注意,也要将静态库相应的.h放到源文件所在的位置)。

      B:.lib复制到源码所在的文件夹下。

    à通过配置的方式引入静态库。

    方式是:

        右击项目à属性à配置属性à输入à附加依赖项(如现有依赖项加入的方式加入.lib静态库)。

     

  • 相关阅读:
    Elasticsearch 配置优化
    一个Elasticsearch嵌套nested查询的实例
    apache kafka配置中request.required.acks含义
    filebeat配置介绍
    Linux nohup命令详解
    elasticsearch中如何手动控制全文检索结果的精准度
    elasticsearch中filter执行原理深度剖析(bitset机制与caching机制)
    logback与log4j比较
    Markdown常用语法
    Asp.NetCore3.1中JWT认证入门使用(一)
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6978000.html
Copyright © 2011-2022 走看看