Рабочая среда: haisi3516ev200, кросс-компиляция: arm-himix100- linux -g cc, ядро: linux -4.9.37
Когда я запускаю встроенный код Linux, память начинается с 22 МБ, медленно уменьшается до примерно 6 МБ и быстро до примерно 22 М, а затем медленно уменьшается до примерно 6 М ... Я думал, что это произойдет из-за утечки памяти, но я не могу понять это. Я свободно проверяю memery, например так (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;
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 ;
}