Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 运行嵌入式linux的代码,memery从2200万开始,慢慢减少到大约600万,然后迅速增加到大约2200万;然后下降到6米左右_C_Linux - Fatal编程技术网

C 运行嵌入式linux的代码,memery从2200万开始,慢慢减少到大约600万,然后迅速增加到大约2200万;然后下降到6米左右

C 运行嵌入式linux的代码,memery从2200万开始,慢慢减少到大约600万,然后迅速增加到大约2200万;然后下降到6米左右,c,linux,C,Linux,运行环境:haisi3516ev200,交叉编译:arm-himix100-linux-gcc,内核:linux-4.9.37 当我运行嵌入式Linux代码时,内存从22M开始,慢慢减少到大约6M,然后迅速增加到大约22M,然后慢慢减少到大约6M。。。我以为是因为内存泄漏,但我想不出来。我允许用户自由检查内存,如下所示(uint:k): 22284 21900 21772 21324 19500 19176 18792 18056 16904 16296 15560 14888 14216 12

运行环境:haisi3516ev200,交叉编译:arm-himix100-linux-gcc,内核:linux-4.9.37

  • 当我运行嵌入式Linux代码时,内存从22M开始,慢慢减少到大约6M,然后迅速增加到大约22M,然后慢慢减少到大约6M。。。我以为是因为内存泄漏,但我想不出来。我允许用户自由检查内存,如下所示(uint:k):

  • 22284 21900 21772 21324 19500 19176 18792 18056 16904 16296 15560 14888 14216 12680 11448 10008 8536 6992 6756 22352 20656 20336 19472 18672 17968 15440 11040 69609 22088

  • 代码很简单
  • void main()
    {
    int-sockfd;
    字符ip地址[ip地址]={0};
    s_addr_中的结构sockaddr_;
    字符缓冲区[1024];
    int-ret=-1;
    int len=0;
    康涅狄格州内;
    int32_t马赫数=0,macl=0;
    printf(“\n线程发送设备信息开始\n”);
    而(1)
    {
    sockfd=套接字(AF_INET,SOCK_STREAM,0);
    如果(sockfd==-1)
    {
    printf(“套接字错误!线程退出\n”);
    打破
    }
    memset(&s_addr_in,0,sizeof(s_addr_in));
    s\u addr\u in.sin\u addr.s\u addr=inet\u addr(ini\u info->server\u ip);
    s_addr_in.sin_family=AF_INET;
    s_addr_in.sin_port=htons(服务器_端口);
    //设置tcp保持有效
    设置\u tcp\u保持\u活动(sockfd);
    //康奈特
    连接状态=0;
    对于(i=0;i<200;i++)
    {
    美国LEEP(10000);
    ret=connect(sockfd,(struct sockaddr*)(&s_addr_in),sizeof(s_addr_in));
    如果(ret==0)
    {
    连接状态=1;
    ret=本地网络(ini\u信息->网络类型、ip地址、马赫数和macl);
    如果(0!=ret){
    printf(“获取本地ip失败”);
    返回NULL;
    }
    printf(“ip地址=%s,mac=%06x%06x\n”,ip地址,马赫数,macl);
    打破
    }
    }
    如果(连接状态==0)
    {
    printf(“连接失败\n”);
    关闭(sockfd);
    继续;
    }
    printf(“连接成功\n”);
    int-cnt=0;
    而(1)
    {
    睡眠(5);
    memset(buffer,0,sizeof(buffer));
    snprintf(buffer,sizeof(buffer),“{\'type\'”:0,\'opcode\':1,\'information\':{\'id\':\'112233445566\',\'status\':{\'power\':100,\'temp\':56}”);
    cnt=strlen(缓冲器);
    printf(“buffer=%s,strlen(buffer)=%d\n”,buffer,cnt);
    ret=写入(sockfd、缓冲区、cnt);
    
    如果(ret)问题是什么?您的代码不完整,无法编译。请提供一个警告:这可能是内存泄漏,它不会重置为22M。因此,增长的可能是一些缓存。甚至可能是stdout的缓存。如果是系统缓存,这没问题,因为Linux会根据需要快速释放内存(所以像
    top
    这样的其他程序甚至不在used中包含它)。
    void main()
    {
        int sockfd;
        char ip_addr[IP_ALEN] = {0};
        struct sockaddr_in s_addr_in;
    
        char buffer[1024];
        int ret = -1;
        int len =0;
        int conn_state, i;
    
        int32_t mach = 0,macl = 0;
    
        printf("\n thread send device info start \n");
        while(1)
        {
            sockfd = socket(AF_INET,SOCK_STREAM,0);
            if(sockfd == -1)
            {
                printf("socket error! thread exit \n");
                break;
            }
    
    
            memset(&s_addr_in,0,sizeof(s_addr_in));
            s_addr_in.sin_addr.s_addr = inet_addr(ini_info->server_ip); 
            s_addr_in.sin_family = AF_INET;
            s_addr_in.sin_port = htons(SERVER_PORT);
    
            //set tcp keepalive
            set_tcp_keep_alive(sockfd);
    
                    //connet
            conn_state  = 0;
            for(i = 0; i< 200; i++)
            {
                usleep(10000);
                ret = connect(sockfd,(struct sockaddr *)(&s_addr_in),sizeof(s_addr_in));
                if(ret == 0)
                {
                    conn_state = 1; 
    
                    ret = local_inet(ini_info->net_type,ip_addr,&mach,&macl);
                    if (0 != ret){
                        printf("get local ip failed");
                        return NULL;
                    }
                    printf("ip_addr = %s, mac = %06x%06x \n", ip_addr, mach,macl);
    
                    break;
                }
            }
    
            if(conn_state == 0)
            {
                printf("connect failed \n");
                close(sockfd);
                continue;
            }
    
    
            printf("connect success \n");
    
            int cnt = 0;
            while(1)
            {
                sleep(5);
    
                memset(buffer,0,sizeof(buffer));
                snprintf(buffer, sizeof(buffer), "{\"type\":0,\"opcode\":1,\"information\": {\"id\":\"112233445566\"},\"status\":{\"power\":100,\"temp\":56}}");
                cnt = strlen(buffer);
                printf("buffer = %s,    strlen(buffer) = %d\n", buffer, cnt);
                ret = write(sockfd,buffer,cnt);
                if(ret <= 0)
                {
                    printf("send status info error \n");
                    break;
                }
                printf("report device info to ai-box success \n");
    
            }
            close(sockfd);
        }
        return ;
    }