Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:14

0001 // gcc reallocTest.cc -lstdc++ -o /tmp/reallocTest && /tmp/reallocTest 
0002 
0003 #include "sproc.h"
0004 
0005 #include <iostream>
0006 #include <iomanip>
0007 #include <string> 
0008 #include <sstream> 
0009 #include <cstring> 
0010 #include <cstdlib> 
0011 #include <cassert> 
0012 
0013 template<typename T>
0014 struct A
0015 {
0016     A(int ni_, int nj_=1, int nk_=1, int nl_=1, int nm_=1) 
0017         :
0018         ni(ni_),
0019         nj(nj_),
0020         nk(nk_),
0021         nl(nl_),
0022         nm(nm_),
0023         ptr(NULL)
0024     {
0025     } 
0026 
0027     unsigned size()     const { return ni*nj*nk*nl*nm ; }
0028     unsigned itemsize() const { return    nj*nk*nl*nm ; }
0029  
0030     void allocate()
0031     {
0032         unsigned num_bytes = sizeof(T)*size() ; 
0033         if(num_bytes > 0)
0034         {
0035             ptr = (T*)malloc(num_bytes) ; 
0036         }
0037     }
0038  
0039     void add(T* src, unsigned num_vals)
0040     {
0041         unsigned item = itemsize() ; 
0042         assert( num_vals % item == 0 ); 
0043         unsigned num_item = num_vals / item ; 
0044 
0045         unsigned cur_bytes = sizeof(T)*size() ; 
0046         unsigned add_bytes = sizeof(T)*num_item*item ; 
0047         unsigned new_bytes = cur_bytes+add_bytes ; 
0048 
0049         if( ptr == NULL )
0050         {
0051             ptr = (T*)malloc(add_bytes) ; 
0052         }
0053         else
0054         {
0055             ptr = (T*)realloc(ptr, new_bytes); 
0056         }
0057         memcpy( ptr + ni*item,  src,  add_bytes ); 
0058 
0059         ni += num_item ; 
0060     }
0061 
0062     void reset()
0063     {
0064         free(ptr);
0065         ptr = NULL ; 
0066         ni = 0 ; 
0067     }
0068 
0069     std::string desc() const 
0070     {
0071         std::stringstream ss ; 
0072         ss << " shape (" << ni << "," << nj << "," << nk << "," << nl << "," << nm << ")"  ; 
0073         std::string s = ss.str(); 
0074         return s ; 
0075     }
0076 
0077     int      ni ; 
0078     int      nj ; 
0079     int      nk ;
0080     int      nl ;
0081     int      nm ;
0082 
0083     T*       ptr ;
0084 };
0085 
0086 
0087 int main() 
0088 { 
0089     unsigned itemsize = 6*4 ; 
0090     float* f = new float[itemsize]; 
0091     for(int i=0 ; i < int(itemsize) ; i++) f[i] = float(i); 
0092 
0093     A<float>* a = new A<float>(0, 6, 4 ); 
0094 
0095     float vm0 = sproc::VirtualMemoryUsageMB() ;
0096 
0097     for(int e=0 ; e < 100 ; e++)
0098     {
0099         for(int s=0 ; s < 1000 ; s++) a->add(f, itemsize); 
0100         std::cout << std::setw(4) << e << " : " << a->desc() << std::endl ;  
0101         a->reset(); 
0102     }
0103     float vm1 = sproc::VirtualMemoryUsageMB() ;
0104     float dv = vm1 - vm0 ; 
0105     std::cout 
0106         << " vm0 " << vm0 
0107         << " vm1 " << vm1 
0108         << " dv " << dv 
0109         << std::endl 
0110         ;
0111 
0112    return 0; 
0113 }