# Memory monitoring of Open AT application

**URL:** <https://forum.sierrawireless.com/t/memory-monitoring-of-open-at-application/1587>\
**Category:** Development tools\
**Created:** [September 7, 2007, 6:16am UTC](https://forum.sierrawireless.com/t/memory-monitoring-of-open-at-application/1587 "2007-09-07T06:16:26Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![JoParker](https://avatars.discourse-cdn.com/v4/letter/j/ac91a4/32.png) [@JoParker](https://forum.sierrawireless.com/u/JoParker)\
**Post date:** [September 7, 2007, 6:16am UTC](https://forum.sierrawireless.com/t/memory-monitoring-of-open-at-application/1587/1 "2007-09-07T06:16:26Z")

</div>

Greetings,

How can I monitor the memory usage of an Open AT application? Iâ€™ve found the Memory Module in the Target Monitoring Tool, but I donâ€™t have any pools displayed like the ones shown in the TMT help. The Memory Parameter window tells me â€œPool data has not been initializedâ€ whenever I try to change anything. How do I set up memory pools, and how can I watch my memory usage? Are there any other ways to do it?

Thanks.

---

<div class="post-metadata">

**Author:** ![fft](https://avatars.discourse-cdn.com/v4/letter/f/e8c25b/32.png) [@fft](https://forum.sierrawireless.com/u/fft)\
**Post date:** [September 7, 2007, 3:21pm UTC](https://forum.sierrawireless.com/t/memory-monitoring-of-open-at-application/1587/2 "2007-09-07T15:21:43Z")

</div>

You can hack adl\_memGet() and adl\_memRelease() so that they count bytes. Something like (untested code):

```auto
// adl_getMem() aligns blocks on 32 bytes and takes 16 bytes overhead
static reserved_size( int requested) {
  return ((requested + 16 + 31) & ~31); 
}

int USEFUL_MEM = 0, // memory you actually asked for
    RESERVED_MEM = 0; // how much has been blocked due to alignment and overhead

void *memGetAndLog( size_t len) {
   void *block = adl_memGet( len + sizeof( size_t));
   if( ! block) { /* Barf */ }
   USEFUL_MEM += len;
   RESERVED_MEM += reserved_size( len);
   *(size_t*) block = len;

   return (void*) ((size_t*)block + 1);
}

void memReleaseAndLog( void *p) {
  size_t *plen = p; plen--;
  USEFUL_MEM -=*plen;
  RESERVED_MEM -= reserved_size( *plen);
  adl_memRelease( plen);
}
```

Then put some alias to map mem operations on the logging ones:

```auto
void *memGetAndLog( size_t len);
void memReleaseAndLog( void *p);
#define adl_memGet memGetAndLog
#define adl_memRelease memReleaseAndLog
```

[/code]
