C 运行嵌入式linux的代码,memery从2200万开始,慢慢减少到大约600万,然后迅速增加到大约2200万;然后下降到6米左右
运行环境:haisi3516ev200,交叉编译:arm-himix100-linux-gcc,内核:linux-4.9.37C 运行嵌入式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
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 ;
}