- 论坛徽章:
- 0
|
- #include <sys/stat.h>
- #include <sys/mman.h>
- #include <fcntl.h>
- #include <sys/types.h>
- #include <stdlib.h>
- #include <errno.h>
- #define uchar unsigned char
- #define USER_PATH "/home/user"
- #define LTH_USER 48
- int main()
- {
- uchar *from, temp;
- uchar buf[100];
- long i;
- int fd;
- struct stat statbuf;
- fd = open(USER_PATH, O_RDWR);
- if (fd)
- {
- //获取文件大小
- if ((fstat(fd, &statbuf)) < 0) //获取失败
- {
- close (fd);
- exit(1);
- }
- from = (uchar *)mmap(NULL, (size_t)statbuf.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (from == MAP_FAILED) //映射失败
- {
- close(fd);
- exit(1);
- }
- }
- else
- {
- exit(1);
- }
- printf("====================================\n");
- system("free");
-
- for (i = 0; i < 140000; i++)
- {
- memcpy(buf, from + i*LTH_USER, LTH_USER);
- if (buf[47] == 0x01)
- continue;
- buf[47] = 0x01;
- }
- printf("====================================\n");
- system("free");
-
- munmap(from, (size_t)statbuf.st_size);
- printf("====================================\n");
- system("free");
-
- close (fd);
- printf("====================================\n");
- system("free");
- }
复制代码
上面代码的运行结果如下:
====================================
total used free shared buffers
Mem: 62676 4908 57768 0 4
Swap: 0 0 0
Total: 62676 4908 57768
====================================
total used free shared buffers
Mem: 62676 11480 51196 0 4
Swap: 0 0 0
Total: 62676 11480 51196
====================================
total used free shared buffers
Mem: 62676 11480 51196 0 4
Swap: 0 0 0
Total: 62676 11480 51196
====================================
total used free shared buffers
Mem: 62676 11480 51196 0 4
Swap: 0 0 0
Total: 62676 11480 51196
我的问题是,为什么内存没有释放掉?(注:被映射的文件比较大6720480 bytes) |
|