1/* This is part of the netCDF package.
2   Copyright 2005 University Corporation for Atmospheric Research/Unidata
3   See COPYRIGHT file for conditions of use.
4
5   Test internal netcdf-4 file code.
6   $Id$
7*/
8
9#include <config.h>
10#include <stdio.h>
11#include <nc_tests.h>
12#include <err_macros.h>
13#include "netcdf.h"
14#include <hdf5.h>
15#include <unistd.h>
16#include <time.h>
17#include <sys/time.h> /* Extra high precision time info. */
18#include <string.h>
19
20#define NDIMS 1
21#define FILE_NAME "tst_mem.nc"
22#define NUM_TRIES 20000
23#define TIME_NAME "time"
24#define SFC_TEMP_NAME "sfc_temp"
25
26void
27get_mem_used2(int *mem_used)
28{
29   char buf[30];
30   FILE *pf;
31
32   snprintf(buf, 30, "/proc/%u/statm", (unsigned)getpid());
33   pf = fopen(buf, "r");
34   if (pf) {
35      unsigned size; /*       total program size */
36      unsigned resident;/*   resident set size */
37      unsigned share;/*      shared pages */
38      unsigned text;/*       text (code) */
39      unsigned lib;/*        library */
40      unsigned data;/*       data/stack */
41      /*unsigned dt;          dirty pages (unused in Linux 2.6)*/
42      fscanf(pf, "%u %u %u %u %u %u", &size, &resident, &share,
43      &text, &lib, &data);
44      *mem_used = data;
45   }
46   else
47      *mem_used = -1;
48  fclose(pf);
49}
50
51int main(void)
52{
53   int ncidsfc_tempid;
54   float data;
55   int dimid;
56   size_t l_index[NDIMS] = {10000};
57   int mem_usedmem_used1;
58   int i;
59
60   printf("\n*** Testing netcdf-4 memory use with unlimited dimensions.\n");
61   printf("*** testing with user-contributed code...");
62
63   if (nc_create(FILE_NAMENC_NETCDF4, &ncid)) ERR;
64   if (nc_def_dim(ncidTIME_NAMENC_UNLIMITED, &dimid)) ERR;
65   if (nc_def_var(ncidSFC_TEMP_NAMENC_FLOATNDIMS, &dimid, &sfc_tempid)) ERR;
66
67   /* Write data each 100ms*/
68   get_mem_used2(&mem_used);
69   for (i = 0; i < NUM_TRIESi++)
70   {
71      data = 25.5 + l_index[0];
72      if (nc_put_var1_float(ncidsfc_tempidl_index, (const float*) &data)) ERR;
73      l_index[0]++;
74      get_mem_used2(&mem_used1);
75      if (!(i%100) && mem_used1 - mem_used)
76  printf("delta %d bytes of memory for try %d\n", mem_used1 - mem_usedi);
77   }
78
79   if (nc_close(ncid)) ERR;
80   SUMMARIZE_ERR;
81   FINAL_RESULTS;
82}


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed