I am working on c++ in a linux system ( Fedora core 4 ),
kernel version - 2.6.11-1.1369_FC4
gcc version - 4.0.0 20050519 ( Red Hat 4.0.0-8 )
In my code i am creating a vector to store pointers of type structure "SAMPLE_TABLE_STRUCT" ( size of this structure is 36 bytes ). I create an instance of structure "SAMPLE_TABLE_STRUCT" using operator "new" and push back into the vector,this is done inside a for loop for 204800 times. After i come out of for loop i observe the memory consumed by the process using the command "pmap -d pid". The memory consumption increases by approximately 8 MB. After this i delete all the contents of vector using "delete" operator. Now if i observe the memory consumed by the process ( using "pmap -d pid" command ) it shows no reduction in the memory even after deallocating the memory in the code.
It shows memory reduction after deleting vector contents if i store the "char *" elements into the vector instead of "SAMPLE_TABLE_STRUCT *" elements.
Am not able to figure it out why even after deleting the vector ( of type "SAMPLE_TABLE_STRUCT *" )contents the memory reduction is not seen...?
Can anyone please help me out here...?
Here is the piece of code where am facing the problem -
Expand|Select|Wrap|Line Numbers
- #define ALTERNATE
- #define MAX_STRING_VEC_SIZE 134
- #define MAX_STRUCT_VEC_SIZE 1024*200//134
- #define MAX_MEM_SIZE 1024*50
- /*vector of char * type*/
- void Function()
- {
- std::vector< char * > v_pData;
- #ifdef ALTERNATE
- v_pData.resize( MAX_STRING_VEC_SIZE, NULL );
- #endif //ALTERNATE
- bool bFlag = true;
- while( bFlag );
- //Allocate Memory
- for( int nInd = 0 ; nInd < MAX_STRING_VEC_SIZE; nInd++ )
- {
- char * pData = new char [MAX_MEM_SIZE];
- memset( pData, 0, MAX_MEM_SIZE );
- #ifdef ALTERNATE
- v_pData[nInd] = pData;
- #else //ALTERNATE
- v_pData.push_back( pData );
- #endif //#endif //ALTERNATE
- }
- bFlag = true;
- while( bFlag );
- //Release all the Memory
- for( int nInd = 0 ; nInd < MAX_STRING_VEC_SIZE; nInd++ )
- {
- delete [] v_pData[nInd];
- }
- v_pData.clear();
- }
- /*vector of SAMPLE_TABLE_STRUCT * type*/
- void Function1()
- {
- std::vector< SAMPLE_TABLE_STRUCT * > v_pData;
- #ifdef ALTERNATE
- v_pData.resize( MAX_STRUCT_VEC_SIZE, NULL );
- #endif //ALTERNATE
- //Allocate Memory
- for( int nInd = 0 ; nInd < MAX_STRUCT_VEC_SIZE; nInd++ )
- {
- SAMPLE_TABLE_STRUCT * pData = new SAMPLE_TABLE_STRUCT;
- #ifdef ALTERNATE
- v_pData[nInd] = pData;
- #else //ALTERNATE
- v_pData.push_back( pData );
- #endif //#endif //ALTERNATE
- }
- //Release all the Memory
- for( int nInd = 0 ; nInd < MAX_STRUCT_VEC_SIZE; nInd++ )
- {
- delete v_pData[nInd];
- v_pData[nInd] = NULL;
- }
- v_pData.clear();
- }