在开发中,发现使用memset后,有内存抖动问题,所以测试代码实测了一下。
问题现象:在memset后,物理内存增大
原因:编译器编译程序时,为其分配虚拟内存,程序实际运行时操作系统才会将其映射到物理内存。
测试代码:
#include <iostream>
#include <string.h>
#include <unistd.h>
using namespace std;
void init_array();
#define STRING_LEN 255
char gstring[STRING_LEN];
#pragma pack (1)
typedef struct A
{
int a;
char b[33];
int c;
char d[33];
}test_A;
#pragma pack ()
test_A test_array[1024*100];
int main()
{
for(int i=0;i<10;i++)
{
test_array[i].a = i+1;
strncpy(test_array[i].b,"abc",strlen("abc"));
test_array[i].c = i+2;
strncpy(test_array[i].d,"def",strlen("abc"));
}
memset(gstring,0,STRING_LEN);
cout<<"!!!enter!!!!!!"<<endl;
while(1)
{
fgets(gstring,STRING_LEN,stdin );
gstring[strlen(gstring)-1