GCC memory leaks on empty program? - c

I've just downloaded DrMemory and wanted to check for memory leaks in my application where I came across that DrMemory shows memory leaks on an "empty program"!
Where do those memory leaks come from?
And secondly, what is an example of what beginners often do wrong which causes DrMemory to complain about uninitialized access(es)?
Note that I am relatively new to C and all that native stuff, so I don't understand most of the things DrMemory tells me here..
int main() {
}
gcc main.c -o a.exe
drmemory -show_reachable -- a.exe
Dr. Memory version 1.4.6 build 2 built on Mar 7 2012 10:14:04
Application cmdline: ""C:\Users\niklas\Desktop\a.exe""
Recorded 62 suppression(s) from default C:\DrMemory/bin/suppress-default.txt
REACHABLE LEAK 532 direct bytes 0x003e07d0-0x003e09e4 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 1152 direct bytes 0x003e09f0-0x003e0e70 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 8 direct bytes 0x003e11a8-0x003e11b0 + 0 indirect bytes
# 0 msvcrt.dll!towlower
# 1 msvcrt.dll!towlower
# 2 msvcrt.dll!clearerr_s
# 3 msvcrt.dll!clearerr_s
# 4 __mingw_CRTStartup
# 5 mainCRTStartup
# 6 KERNEL32.dll!BaseThreadInitThunk
# 7 ntdll.dll!RtlInitializeExceptionChain
# 8 ntdll.dll!RtlInitializeExceptionChain
REACHABLE LEAK 80 direct bytes 0x003e11d8-0x003e1228 + 0 indirect bytes
# 0 __cmshared_create_or_grab [../../../../gcc-4.4.1/libgcc/../gcc/config/i386/cygming-shared-data.c:145]
# 1 __gcc_register_frame
# 2 register_frame_ctor
# 3 __do_global_ctors
# 4 __mingw_CRTStartup
# 5 mainCRTStartup
# 6 KERNEL32.dll!BaseThreadInitThunk
# 7 ntdll.dll!RtlInitializeExceptionChain
# 8 ntdll.dll!RtlInitializeExceptionChain
REACHABLE LEAK 544 direct bytes 0x003e1568-0x003e1788 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 1863 direct bytes 0x003e1790-0x003e1ed7 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 4096 direct bytes 0x003e2780-0x003e3780 + 0 indirect bytes
# 0 msvcrt.dll!strcpy_s +0x5f (0x76aff5d3 <msvcrt.dll+0xf5d3>)
# 1 msvcrt.dll!wprintf +0x142 (0x76b15f26 <msvcrt.dll+0x25f26>)
# 2 msvcrt.dll!printf +0x35 (0x76b0c5ef <msvcrt.dll+0x1c5ef>)
# 3 main
REACHABLE LEAK 24 direct bytes 0x005307d0-0x005307e8 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE POSSIBLE LEAK 3526 direct bytes 0x005307f0-0x005315b6 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE POSSIBLE LEAK 2678 direct bytes 0x005315c0-0x00532036 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 60 direct bytes 0x00532040-0x0053207c + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 48 direct bytes 0x00532088-0x005320b8 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 120 direct bytes 0x005320c0-0x00532138 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 120 direct bytes 0x00532140-0x005321b8 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 540 direct bytes 0x005321c0-0x005323dc + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 66 direct bytes 0x005323e8-0x0053242a + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE POSSIBLE LEAK 120 direct bytes 0x00532438-0x005324b0 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 16 direct bytes 0x005324b8-0x005324c8 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 70 direct bytes 0x005324d0-0x00532516 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE POSSIBLE LEAK 120 direct bytes 0x00532520-0x00532598 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 16 direct bytes 0x005325b8-0x005325c8 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 16 direct bytes 0x005325a0-0x005325b0 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 66 direct bytes 0x005325d0-0x00532612 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 32 direct bytes 0x00532620-0x00532640 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 100 direct bytes 0x00532648-0x005326ac + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 32 direct bytes 0x005326b8-0x005326d8 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 512 direct bytes 0x005326e0-0x005328e0 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 512 direct bytes 0x005328e8-0x00532ae8 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 36 direct bytes 0x00532af0-0x00532b14 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 36 direct bytes 0x00532b20-0x00532b44 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 48 direct bytes 0x00532b50-0x00532b80 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 32 direct bytes 0x00532b88-0x00532ba8 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 32 direct bytes 0x00532bb0-0x00532bd0 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 32 direct bytes 0x00532bd8-0x00532bf8 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 32 direct bytes 0x00532c28-0x00532c48 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 32 direct bytes 0x00532c50-0x00532c70 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 16 direct bytes 0x00532c78-0x00532c88 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 62 direct bytes 0x00532c90-0x00532cce + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 120 direct bytes 0x00532cd8-0x00532d50 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 16 direct bytes 0x00532d58-0x00532d68 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 16 direct bytes 0x00532d70-0x00532d80 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 16 direct bytes 0x00532d88-0x00532d98 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 16 direct bytes 0x00532da0-0x00532db0 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 520 direct bytes 0x00532de0-0x00532fe8 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 1024 direct bytes 0x00532ff0-0x005333f0 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 32 direct bytes 0x005333f8-0x00533418 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 32 direct bytes 0x00533420-0x00533440 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 32 direct bytes 0x00533448-0x00533468 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 206 direct bytes 0x005334e0-0x005335ae + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 16 direct bytes 0x005336f0-0x00533700 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 100 direct bytes 0x00533708-0x0053376c + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 120 direct bytes 0x00533778-0x005337f0 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 32 direct bytes 0x005337f8-0x00533818 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 62 direct bytes 0x00533820-0x0053385e + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 62 direct bytes 0x00533868-0x005338a6 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 36 direct bytes 0x005338d8-0x005338fc + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 24 direct bytes 0x00533908-0x00533920 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 8 direct bytes 0x00533928-0x00533930 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 1288 direct bytes 0x00533950-0x00533e58 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 888 direct bytes 0x00533e60-0x005341d8 + 0 indirect bytes
# 0 <not in a module> (0x00000000)
REACHABLE LEAK 520 direct bytes 0x00534888-0x00534a90 + 0 indirect bytes
# 0 ntdll.dll!RtlInitializeExceptionChain +0x1e8 (0x7712b57a <ntdll.dll+0x5b57a>)
# 1 KERNELBASE.dll!GetEnvironmentVariableA +0x18b (0x752e7b22 <KERNELBASE.dll+0x7b22>)
# 2 msvcrt.dll!memicmp +0x85 (0x76b0074e <msvcrt.dll+0x1074e>)
# 3 msvcrt.dll!ismbblead +0x2f (0x76aff637 <msvcrt.dll+0xf637>)
# 4 msvcrt.dll!ismbblead +0x12 (0x76aff61a <msvcrt.dll+0xf61a>)
# 5 msvcrt.dll!clearerr_s +0x3fa (0x76b09fb0 <msvcrt.dll+0x19fb0>)
# 6 msvcrt.dll!clearerr_s +0x2e3 (0x76b09e99 <msvcrt.dll+0x19e99>)
# 7 msvcrt.dll!clearerr_s +0x27e (0x76b09e34 <msvcrt.dll+0x19e34>)
# 8 __mingw_CRTStartup
# 9 mainCRTStartup
#10 KERNEL32.dll!BaseThreadInitThunk
#11 ntdll.dll!RtlInitializeExceptionChain
REACHABLE LEAK 644 direct bytes 0x00534b78-0x00534dfc + 0 indirect bytes
# 0 ntdll.dll!RtlLookupAtomInAtomTable
# 1 ntdll.dll!RtlCreateAtomTable
# 2 KERNEL32.dll!GetThreadId
# 3 KERNEL32.dll!LocalUnlock
# 4 KERNEL32.dll!FindAtomA
# 5 __cmshared_create_or_grab [../../../../gcc-4.4.1/libgcc/../gcc/config/i386/cygming-shared-data.c:140]
# 6 __gcc_register_frame
# 7 register_frame_ctor
# 8 __do_global_ctors
# 9 __mingw_CRTStartup
#10 mainCRTStartup
#11 KERNEL32.dll!BaseThreadInitThunk
REACHABLE POSSIBLE LEAK 32 direct bytes 0x00534e28-0x00534e48 + 0 indirect bytes
# 0 ntdll.dll!RtlInitializeCriticalSectionEx +0x12b (0x77127de3 <ntdll.dll+0x57de3>)
# 1 ntdll.dll!RtlInitializeCriticalSectionEx +0x82 (0x77127d3b <ntdll.dll+0x57d3b>)
# 2 ntdll.dll!RtlInitializeCriticalSection +0x11 (0x7712f8d0 <ntdll.dll+0x5f8d0>)
# 3 ntdll.dll!RtlCreateAtomTable +0x8b (0x770f8767 <ntdll.dll+0x28767>)
# 4 ntdll.dll!RtlCreateAtomTable +0x60 (0x770f873c <ntdll.dll+0x2873c>)
# 5 KERNEL32.dll!GetThreadId +0x1e (0x7726a912 <KERNEL32.dll+0x4a912>)
# 6 KERNEL32.dll!LocalUnlock +0x44 (0x772692ea <KERNEL32.dll+0x492ea>)
# 7 KERNEL32.dll!FindAtomA +0x10 (0x7725bac1 <KERNEL32.dll+0x3bac1>)
# 8 __cmshared_create_or_grab [../../../../gcc-4.4.1/libgcc/../gcc/config/i386/cygming-shared-data.c:140]
# 9 __gcc_register_frame
#10 register_frame_ctor
#11 __do_global_ctors
REACHABLE LEAK 158 direct bytes 0x00534f30-0x00534fce + 0 indirect bytes
# 0 ntdll.dll!RtlLookupAtomInAtomTable +0x1f1 (0x770f86af <ntdll.dll+0x286af>)
# 1 ntdll.dll!RtlAddAtomToAtomTable +0xbd (0x770f5e8e <ntdll.dll+0x25e8e>)
# 2 KERNEL32.dll!GetSystemDefaultLCID +0x395 (0x77269bfd <KERNEL32.dll+0x49bfd>)
# 3 KERNEL32.dll!AddAtomA +0x10 (0x77259ec9 <KERNEL32.dll+0x39ec9>)
# 4 __cmshared_create_or_grab [../../../../gcc-4.4.1/libgcc/../gcc/config/i386/cygming-shared-data.c:118]
# 5 __gcc_register_frame
# 6 register_frame_ctor
# 7 __do_global_ctors
# 8 __mingw_CRTStartup
# 9 mainCRTStartup
#10 KERNEL32.dll!BaseThreadInitThunk
#11 ntdll.dll!RtlInitializeExceptionChain
DUPLICATE ERROR COUNTS:
SUPPRESSIONS USED:
NO ERRORS FOUND:
0 unique, 0 total unaddressable access(es)
0 unique, 0 total uninitialized access(es)
0 unique, 0 total invalid heap argument(s)
0 unique, 0 total warning(s)
0 unique, 0 total, 0 byte(s) of leak(s)
0 unique, 0 total, 0 byte(s) of possible leak(s)
ERRORS IGNORED:
64 still-reachable allocation(s)
Details: C:\DrMemory/drmemory/logs/DrMemory-a.exe.7400.000/results.txt

Perhaps not Dr. Memory, but an example of how users forget to initialize data is below. I'd describe these as the canonical way that people forget to initialize data. People forget that malloc does not clear the memory area.
struct object_t {
int x;
int *y;
};
struct object_t *object = malloc(sizeof(struct object_t));
if (object->y == NULL) {
<Do stuff>
}
if (object->x == 32) {
<Do stuff>
}

The standard C library (libc) is always linked to your code and it contains special setup code which, for example, knows where/how the OS will provide command line arguments, so it can set up the string array to call main(), set up I/O buffering, connect the file descriptors to the globals stdin, stdout and stderr, etc.
This code does allocate memory but it should also release any resources, so I'm also stumped why DrMemory would report leaks there.
One theory could be that GCC optimizes the code in this special case (because the OS will clean up any such problems after your process terminates) but I doubt that. To verify it, print something to stdout - that should enable the cleanup. If the memory leaks go away, it was an optimizer glitch.
Or, since all the leaks are in native DLLs code, it's a bug by Microsoft.
Try these steps:
Install all the service packs for your OS
Report an error to DrMemory - maybe they know more
Try to compile more complex code with and without optimization options and different levels of aggressiveness.
Try different versions of GCC

Related

Check if array index is out of range in Dr Memory

I need to check if an array index is out of range by using Dr.Memory. I don't use dynamic memory allocation in this case.
When I check this code with Dr.Memory. I'm using Windows 11.
int main() {
clock_t start, end;
float cpu_time_used;
start = clock();
int array[5] = {2, 4, 5, 6, 7};
int number = array[10];
printf("This is a number: %i\n", number);
end = clock();
cpu_time_used = ((float) (end - start)) / CLOCKS_PER_SEC;
printf("\nTotal speed was %f\n", cpu_time_used);
return EXIT_SUCCESS;
}
I get this output from Dr.Memory. As you can see, no complaining about that the index is out of range. Why?
Dr. Memory version 2.5.0 build 0 built on Oct 18 2021 03:01:22
Windows version: WinVer=105;Rel=2009;Build=22000;Edition=Professional
Dr. Memory results for pid 9640: "CControl.exe"
Application cmdline: ""C:\Users\dmn\OneDrive - ITH\Dokument\Projekt\Eclipse\CControl\Debug\CControl.exe""
Recorded 124 suppression(s) from default C:\Program Files (x86)\Dr. Memory\bin64\suppress-default.txt
Error #1: UNADDRESSABLE ACCESS beyond top of stack: reading 0x000000164a9ff980-0x000000164a9ff988 8 byte(s)
# 0 ___chkstk_ms [../../../../../src/gcc-11.2.0/libgcc/config/i386/cygwin.S:132]
# 1 _pei386_runtime_relocator
# 2 __tmainCRTStartup
# 3 .l_start
# 4 ntdll.dll!RtlUserThreadStart
Note: #0:00:00.097 in thread 18604
Note: 0x000000164a9ff980 refers to 664 byte(s) beyond the top of the stack 0x000000164a9ffc18
Note: instruction: or $0x0000000000000000 (%rcx) -> (%rcx)
Error #2: UNADDRESSABLE ACCESS beyond top of stack: reading 0x000000164a9ffa50-0x000000164a9ffa58 8 byte(s)
# 0 ___chkstk_ms [../../../../../src/gcc-11.2.0/libgcc/config/i386/cygwin.S:132]
# 1 __pformat_int.isra.0 [../../../../../src/gcc-11.2.0/libgcc/config/i386/cygwin.S:138]
# 2 __mingw_pformat [../../../../../src/gcc-11.2.0/libgcc/config/i386/cygwin.S:138]
# 3 __mingw_vfprintf [../../../../../src/gcc-11.2.0/libgcc/config/i386/cygwin.S:138]
# 4 printf
# 5 main
Note: #0:00:00.135 in thread 18604
Note: 0x000000164a9ffa50 refers to 8 byte(s) beyond the top of the stack 0x000000164a9ffa58
Note: instruction: or $0x0000000000000000 (%rcx) -> (%rcx)
Error #3: UNINITIALIZED READ: reading register rcx
# 0 __pformat_int.isra.0 [../../../../../src/gcc-11.2.0/libgcc/config/i386/cygwin.S:138]
# 1 __mingw_pformat [../../../../../src/gcc-11.2.0/libgcc/config/i386/cygwin.S:138]
# 2 __mingw_vfprintf [../../../../../src/gcc-11.2.0/libgcc/config/i386/cygwin.S:138]
# 3 printf
# 4 main
Note: #0:00:00.135 in thread 18604
Note: instruction: test %rcx %rcx
Error #4: POSSIBLE LEAK 98 direct bytes 0x00000153bd9001c0-0x00000153bd900222 + 0 indirect bytes
# 0 replace_malloc [d:\a\drmemory\drmemory\common\alloc_replace.c:2580]
# 1 msvcrt.dll!malloc_crt
# 2 msvcrt.dll!_setargv
# 3 msvcrt.dll!_getmainargs
# 4 pre_cpp_init
# 5 msvcrt.dll!initterm
# 6 __tmainCRTStartup
# 7 .l_start
# 8 ntdll.dll!RtlUserThreadStart
===========================================================================
FINAL SUMMARY:
DUPLICATE ERROR COUNTS:
Error # 1: 2
Error # 2: 2
SUPPRESSIONS USED:
ERRORS FOUND:
2 unique, 4 total unaddressable access(es)
1 unique, 1 total uninitialized access(es)
0 unique, 0 total invalid heap argument(s)
0 unique, 0 total GDI usage error(s)
0 unique, 0 total handle leak(s)
0 unique, 0 total warning(s)
0 unique, 0 total, 0 byte(s) of leak(s)
1 unique, 1 total, 98 byte(s) of possible leak(s)
ERRORS IGNORED:
3 unique, 3 total, 113 byte(s) of still-reachable allocation(s)
(re-run with "-show_reachable" for details)
Details: C:\Users\dmn\AppData\Roaming\Dr. Memory\DrMemory-CControl.exe.9640.000\results.txt

Why is there memory leaks with SDL2 (2.0.14) dll?

I am using SDL2 version 2.0.14. This is the current stable version.
I noticed that any program I write with SDL2 has memory leaks. For example
#define SDL_MAIN_HANDLED
#include <SDL2/SDL.h>
int main() {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = SDL_CreateWindow("title",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
640, 480, SDL_WINDOW_OPENGL);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
This is the main.c file. I build it with gcc main.c -o main.exe -lSDL2 -lSDL2main
If I run drmemory main.exe this is what I get -
ERRORS FOUND:
1 unique, 2 total unaddressable access(es)
6 unique, 6 total uninitialized access(es)
0 unique, 0 total invalid heap argument(s)
0 unique, 0 total GDI usage error(s)
0 unique, 0 total handle leak(s)
0 unique, 0 total warning(s)
1 unique, 1 total, 88 byte(s) of leak(s)
1 unique, 1 total, 26 byte(s) of possible leak(s)
I don't see why this program has leaks at all. I tried to find out what is wrong and came across this question
Although this is already answered, I don't see how this solves my issue. I want to know why am I having these leaks and how to fix them. Also do I need to worry about those unaddressable and uninitialized accesses diagnosed by Dr. Memory.
I suspect it has to do something with the SDL2.dll I downloaded from SDL2. I am using the win32-x64 dll.
EDIT
Here is the full 'error' details
Dr. Memory version 2.3.0 build 1 built on Feb 6 2020 06:07:09
Windows version: WinVer=63;Rel=;Build=9600;Edition=Professional
Dr. Memory results for pid 4868: "main.exe"
Application cmdline: "main.exe"
Recorded 118 suppression(s) from default C:\Program Files (x86)\Dr. Memory\bin64\suppress-default.txt
Error #1: UNADDRESSABLE ACCESS beyond top of stack: reading 0x000000000023fb70-0x000000000023fb78 8 byte(s)
# 0 .text [../../../../../src/gcc-8.1.0/libgcc/config/i386/cygwin.S:132]
# 1 _pei386_runtime_relocator
# 2 __tmainCRTStartup
# 3 .l_start
# 4 KERNEL32.dll!BaseThreadInitThunk +0x21 (0x00007ff902e81412 <KERNEL32.dll+0x1412>)
Note: #0:00:00.281 in thread 3800
Note: 0x000000000023fb70 refers to 600 byte(s) beyond the top of the stack 0x000000000023fdc8
Note: instruction: or $0x0000000000000000 (%rcx) -> (%rcx)
Error #2: UNINITIALIZED READ: reading 0x000000000023eeec-0x000000000023eef0 4 byte(s) within 0x000000000023eee8-0x000000000023eef0
# 0 system call NtGdiOpenDCW parameter value #5
# 1 GDI32.dll!GetNearestColor +0x21f (0x00007ff903152650 <GDI32.dll+0x12650>)
# 2 GDI32.dll!GetNearestColor +0x30c (0x00007ff90315273d <GDI32.dll+0x1273d>)
# 3 GDI32.dll!CreateDCW +0x12 (0x00007ff903152783 <GDI32.dll+0x12783>)
# 4 SDL2.dll!? +0x0 (0x0000000073eae403 <SDL2.dll+0x10e403>)
# 5 SDL2.dll!? +0x0 (0x0000000073eae781 <SDL2.dll+0x10e781>)
# 6 USER32.dll!mouse_event +0x1f9 (0x00007ff90532df1a <USER32.dll+0xdf1a>)
# 7 SDL2.dll!? +0x0 (0x0000000073eae91a <SDL2.dll+0x10e91a>)
# 8 SDL2.dll!? +0x0 (0x0000000073eb1d9d <SDL2.dll+0x111d9d>)
# 9 SDL2.dll!? +0x0 (0x0000000073e760ce <SDL2.dll+0xd60ce>)
#10 SDL2.dll!? +0x0 (0x0000000073da1547 <SDL2.dll+0x1547>)
#11 main
Note: #0:00:02.451 in thread 3800
Error #3: UNINITIALIZED READ: reading 0x000000000023f734-0x000000000023f738 4 byte(s) within 0x000000000023f730-0x000000000023f738
# 0 system call NtUserCreateWindowEx parameter value #14
# 1 USER32.dll!IsCharAlphaW +0x20e (0x00007ff905329d4f <USER32.dll+0x9d4f>)
# 2 USER32.dll!IsCharAlphaW +0x436 (0x00007ff905329f77 <USER32.dll+0x9f77>)
# 3 USER32.dll!CreateWindowExW +0x7d (0x00007ff90532a03e <USER32.dll+0xa03e>)
# 4 SDL2.dll!? +0x0 (0x0000000073eaffe9 <SDL2.dll+0x10ffe9>)
# 5 SDL2.dll!? +0x0 (0x0000000073eb08fc <SDL2.dll+0x1108fc>)
# 6 SDL2.dll!? +0x0 (0x0000000073e740b7 <SDL2.dll+0xd40b7>)
# 7 SDL2.dll!? +0x0 (0x0000000073e755df <SDL2.dll+0xd55df>)
# 8 main
Note: #0:00:02.839 in thread 3800
Error #4: UNINITIALIZED READ: reading 0x000000000023f7d4-0x000000000023f7d8 4 byte(s) within 0x000000000023f7d0-0x000000000023f7d8
# 0 system call NtUserCreateWindowEx parameter value #14
# 1 USER32.dll!IsCharAlphaW +0x20e (0x00007ff905329d4f <USER32.dll+0x9d4f>)
# 2 USER32.dll!IsCharAlphaW +0x436 (0x00007ff905329f77 <USER32.dll+0x9f77>)
# 3 USER32.dll!CreateWindowExW +0x7d (0x00007ff90532a03e <USER32.dll+0xa03e>)
# 4 SDL2.dll!? +0x0 (0x0000000073eb2b9c <SDL2.dll+0x112b9c>)
# 5 SDL2.dll!? +0x0 (0x0000000073e7584d <SDL2.dll+0xd584d>)
# 6 main
Note: #0:00:03.636 in thread 3800
Error #5: UNINITIALIZED READ: reading 0x000000000023f494-0x000000000023f498 4 byte(s) within 0x000000000023f490-0x000000000023f498
# 0 system call NtUserCreateWindowEx parameter value #14
# 1 USER32.dll!IsCharAlphaW +0x20e (0x00007ff905329d4f <USER32.dll+0x9d4f>)
# 2 USER32.dll!IsCharAlphaW +0x436 (0x00007ff905329f77 <USER32.dll+0x9f77>)
# 3 USER32.dll!CreateWindowExW +0x7d (0x00007ff90532a03e <USER32.dll+0xa03e>)
# 4 SDL2.dll!? +0x0 (0x0000000073eaf7fa <SDL2.dll+0x10f7fa>)
# 5 SDL2.dll!? +0x0 (0x0000000073eafaed <SDL2.dll+0x10faed>)
# 6 SDL2.dll!? +0x0 (0x0000000073eb099d <SDL2.dll+0x11099d>)
# 7 SDL2.dll!? +0x0 (0x0000000073eb2c5b <SDL2.dll+0x112c5b>)
# 8 SDL2.dll!? +0x0 (0x0000000073e7584d <SDL2.dll+0xd584d>)
# 9 main
Note: #0:00:03.890 in thread 3800
Error #6: UNINITIALIZED READ: reading 0x000000000023f494-0x000000000023f498 4 byte(s) within 0x000000000023f490-0x000000000023f498
# 0 system call NtUserCreateWindowEx parameter value #14
# 1 USER32.dll!IsCharAlphaW +0x20e (0x00007ff905329d4f <USER32.dll+0x9d4f>)
# 2 USER32.dll!IsCharAlphaW +0x436 (0x00007ff905329f77 <USER32.dll+0x9f77>)
# 3 USER32.dll!CreateWindowExW +0x7d (0x00007ff90532a03e <USER32.dll+0xa03e>)
# 4 SDL2.dll!? +0x0 (0x0000000073eaf7fa <SDL2.dll+0x10f7fa>)
# 5 SDL2.dll!? +0x0 (0x0000000073eafe55 <SDL2.dll+0x10fe55>)
# 6 SDL2.dll!? +0x0 (0x0000000073eb099d <SDL2.dll+0x11099d>)
# 7 SDL2.dll!? +0x0 (0x0000000073eb2c5b <SDL2.dll+0x112c5b>)
# 8 SDL2.dll!? +0x0 (0x0000000073e7584d <SDL2.dll+0xd584d>)
# 9 main
Note: #0:00:03.947 in thread 3800
Error #7: UNINITIALIZED READ: reading 0x000000000023f6b0-0x000000000023f6b8 8 byte(s) within 0x000000000023f6a8-0x000000000023f6b8
# 0 system call NtUserTrackMouseEvent TRACKMOUSEEVENT post-dwFlags
# 1 SDL2.dll!? +0x0 (0x0000000073eb3bf2 <SDL2.dll+0x113bf2>)
# 2 SDL2.dll!? +0x0 (0x0000000073dcc1b7 <SDL2.dll+0x2c1b7>)
# 3 SDL2.dll!? +0x0 (0x0000000073dca237 <SDL2.dll+0x2a237>)
# 4 SDL2.dll!? +0x0 (0x0000000073dca7a8 <SDL2.dll+0x2a7a8>)
# 5 SDL2.dll!? +0x0 (0x0000000073ea90d8 <SDL2.dll+0x1090d8>)
# 6 USER32.dll!DispatchMessageW +0x15c (0x00007ff9053224fd <USER32.dll+0x24fd>)
# 7 USER32.dll!DispatchMessageW +0xc2 (0x00007ff905322463 <USER32.dll+0x2463>)
# 8 USER32.dll!CallWindowProcW +0x9a (0x00007ff905323ccb <USER32.dll+0x3ccb>)
# 9 OPENGL32.dll!glDebugEntry +0x1146b (0x00007ff8fa3928fc <OPENGL32.dll+0x428fc>)
#10 USER32.dll!DispatchMessageW +0x15c (0x00007ff9053224fd <USER32.dll+0x24fd>)
#11 USER32.dll!DispatchMessageW +0xc2 (0x00007ff905322463 <USER32.dll+0x2463>)
#12 USER32.dll!MsgWaitForMultipleObjects +0x141 (0x00007ff905323902 <USER32.dll+0x3902>)
#13 USER32.dll!MsgWaitForMultipleObjects +0x20d (0x00007ff9053239ce <USER32.dll+0x39ce>)
#14 USER32.dll!GetWindowLongW +0x10f (0x00007ff905326980 <USER32.dll+0x6980>)
#15 SDL2.dll!? +0x0 (0x0000000073e73b3c <SDL2.dll+0xd3b3c>)
#16 SDL2.dll!? +0x0 (0x0000000073e75896 <SDL2.dll+0xd5896>)
#17 main
Note: #0:00:06.599 in thread 3800
Error #8: LEAK 88 direct bytes 0x0000000002679b00-0x0000000002679b58 + 0 indirect bytes
# 0 replace_RtlAllocateHeap [d:\drmemory_package\common\alloc_replace.c:3771]
# 1 IMM32.dll!CtfImmGetTMAEFlags +0x1b4 (0x00007ff905013b35 <IMM32.dll+0x3b35>)
# 2 IMM32.dll!ImmGetContext +0x105 (0x00007ff905012396 <IMM32.dll+0x2396>)
# 3 SDL2.dll!? +0x0 (0x0000000073eaae90 <SDL2.dll+0x10ae90>)
# 4 SDL2.dll!? +0x0 (0x0000000073eab89b <SDL2.dll+0x10b89b>)
# 5 SDL2.dll!? +0x0 (0x0000000073dc8961 <SDL2.dll+0x28961>)
# 6 SDL2.dll!? +0x0 (0x0000000073ea90a4 <SDL2.dll+0x1090a4>)
# 7 USER32.dll!DispatchMessageW +0x15c (0x00007ff9053224fd <USER32.dll+0x24fd>)
# 8 USER32.dll!DispatchMessageW +0xc2 (0x00007ff905322463 <USER32.dll+0x2463>)
# 9 USER32.dll!CallWindowProcW +0x9a (0x00007ff905323ccb <USER32.dll+0x3ccb>)
#10 OPENGL32.dll!glDebugEntry +0x1146b (0x00007ff8fa3928fc <OPENGL32.dll+0x428fc>)
#11 USER32.dll!DispatchMessageW +0x15c (0x00007ff9053224fd <USER32.dll+0x24fd>)
Error #9: POSSIBLE LEAK 26 direct bytes 0x00000000029c01c0-0x00000000029c01da + 0 indirect bytes
# 0 replace_malloc [d:\drmemory_package\common\alloc_replace.c:2577]
# 1 msvcrt.dll!malloc_crt
# 2 msvcrt.dll!_setargv
# 3 msvcrt.dll!_getmainargs
# 4 pre_cpp_init
# 5 msvcrt.dll!initterm
# 6 __tmainCRTStartup
# 7 .l_start
# 8 KERNEL32.dll!BaseThreadInitThunk +0x21 (0x00007ff902e81412 <KERNEL32.dll+0x1412>)
===========================================================================
FINAL SUMMARY:
DUPLICATE ERROR COUNTS:
Error # 1: 2
SUPPRESSIONS USED:
ERRORS FOUND:
1 unique, 2 total unaddressable access(es)
6 unique, 6 total uninitialized access(es)
0 unique, 0 total invalid heap argument(s)
0 unique, 0 total GDI usage error(s)
0 unique, 0 total handle leak(s)
0 unique, 0 total warning(s)
1 unique, 1 total, 88 byte(s) of leak(s)
1 unique, 1 total, 26 byte(s) of possible leak(s)
ERRORS IGNORED:
91 potential error(s) (suspected false positives)
(details: C:\Users\Kabir\AppData\Roaming\Dr. Memory\DrMemory-main.exe.4868.000\potential_errors.txt)
10 potential leak(s) (suspected false positives)
(details: C:\Users\Kabir\AppData\Roaming\Dr. Memory\DrMemory-main.exe.4868.000\potential_errors.txt)
112 unique, 248 total, 34288 byte(s) of still-reachable allocation(s)
(re-run with "-show_reachable" for details)
Details: C:\Users\Kabir\AppData\Roaming\Dr. Memory\DrMemory-main.exe.4868.000\results.txt

OOM Killer is triggered despite free memory

I am having a problem where the OOM killer is being triggered some times. I have researched in the internet and have found many related threads. But a few things still puzzle me. I hope some one could help me.
Environment: iMX6 (32bit).
User/Kernelspace split: 2G-2G
TotalRAm - 4GB
Some important logs:
top invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
I see that it is trying to allocate 1 page of (contagious) memory (order=0) in the HIGHMEM zone (from gfp_mask). Please correct me if i am wrong.
DMA free:1322780kB min:4492kB low:5612kB high:6736kB active_anon:0kB inactive_anon:0kB active_file:84kB
DMA: 941*4kB (UEMC) 1211*8kB (UEMC) 1185*16kB (UEMC) 836*32kB (UEMC) 554*64kB
(UEMC) 295*128kB (UEMC) 106*256kB
HighMem free:480kB min:512kB low:2384kB high:4256kB active_anon:2021148kB inactive_anon:70364kB active_file:0kB
HighMem: 0*4kB 1*8kB (R) 0*16kB 7*32kB (R) 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB 0*8192kB
I believe the OOM-killer is triggered as the free Highmem (480KB) is below the min (512KB). Again please correct me if i am wrong.
My questions:
1. I thought the DMA_ZONE is only about 16MB, NORMAL_ZONE is upwards from 16MB
to about 896MB and the rest is HIGHMEM_ZONE. But the log shows more than 1GB
free pages (1322780kB) exist in the DMA_ZONE.
2. Why does not the kernel utilize this Zone for further allocation?
Morelogs: (taken out from the complete log):
DMA per-cpu:
CPU 0: hi: 186, btch: 31 usd: 0
CPU 1: hi: 186, btch: 31 usd: 0
CPU 2: hi: 186, btch: 31 usd: 0
CPU 3: hi: 186, btch: 31 usd: 0
HighMem per-cpu:
CPU 0: hi: 186, btch: 31 usd: 51
CPU 1: hi: 186, btch: 31 usd: 20
CPU 2: hi: 186, btch: 31 usd: 4
CPU 3: hi: 186, btch: 31 usd: 14
active_anon:505287 inactive_anon:17591 isolated_anon:0
active_file:21 inactive_file:0 isolated_file:0
unevictable:0 dirty:0 writeback:0 unstable:0
free:330815 slab_reclaimable:1134 slab_unreclaimable:3487
mapped:15956 shmem:25014 pagetables:1982 bounce:0
25046 total pagecache pages
983039 pages of RAM
331349 free pages
9947 reserved pages
2772 slab pages
543663 pages shared
0 pages swap cached
cat /proc/pagetypeinfo
Page block order: 13
Pages per block: 8192
Free pages count per migrate type at order 0 1 2 3 4 5 6 7 8 9 10 11 12 13
Node 0, zone DMA, type Unmovable 1 0 9 8 3 1 0 1 1 1 1 0 1 0
Node 0, zone DMA, type Reclaimable 4 5 5 1 2 0 1 1 1 0 1 0 1 0
Node 0, zone DMA, type Movable 1 6 4 0 0 0 1 1 2 4 3 3 4 28
Node 0, zone DMA, type Reserve 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Node 0, zone DMA, type CMA 1 1 2 0 0 0 0 0 1 1 0 0 1 3
Node 0, zone DMA, type Isolate 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone HighMem, type Unmovable 11 7 2 2 9 6 5 3 3 1 0 1 1 0
Node 0, zone HighMem, type Reclaimable 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone HighMem, type Movable 23 201 4771 4084 1803 403 105 69 57 38 23 21 8 23
Node 0, zone HighMem, type Reserve 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Node 0, zone HighMem, type CMA 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone HighMem, type Isolate 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Number of blocks type Unmovable Reclaimable Movable Reserve CMA Isolate
Node 0, zone DMA 5 1 33 1 16 0
Node 0, zone HighMem 2 0 62 1 0 0
I would be glad to post further logs if necessary.
Thankyou,
Srik
probably long shot but have you tried adding
vm.overcommit_memory = 2
vm.overcommit_ratio = 80
to
/etc/sysctl.conf
The changes are high that you did run out of virtual memory because 32 bit kernel can only directly access 4 GB of virtual memory and there're heavy limitations on the usable address space for hardware access. For example, network adapter hardware acceleration could require memory in some specific address range and if you run out of RAM in that specific range, the system either has to run OOM Killer or kill your network adapter. And that's true even if your system has free available in some unrelated zone.
For details, try reviewing these links:
https://serverfault.com/questions/564068/linux-oom-situation-32-bit-kernel
https://serverfault.com/questions/548736/how-to-read-oom-killer-syslog-messages
and maybe this, too:
https://unix.stackexchange.com/questions/373312/oom-killer-doesnt-work-properly-leads-to-a-frozen-os
TL;DR: if you need more than 2 GB of RAM, install a 64 bit OS.

Informix initialisation fails because the master daemon dies

I'm trying to install a Informix Developer instance on a debian 7 server, to get to test a couple of programs with Informix as Database engine. I tried all solutions I could find googling the error messages, but it kept me going back and forth. Can any body see what my problem is?
The log:
14:46:46 Parameter's user-configured value was adjusted.
(DS_MAX_SCANS)
14:46:46 Parameter's user-configured value was adjusted. (ONLIDX_MAXMEM)
14:46:46 IBM Informix Dynamic Server Started.
14:46:46 Warning: The IBM IDS Developer Edition license restriction limits
14:46:46 the total shared memory size for this server to 1048576 KB.
14:46:46 The maximum allowable shared memory was reset to this size to start the database server.
14:46:46 Requested shared memory segment size rounded from 8308KB to 8840KB
Sat Dec 19 14:46:48 2015
14:46:48 Successfully added a bufferpool of page size 2K.
14:46:48 Event alarms enabled. ALARMPROG = '/etc/Informix/etc/alarmprogram.sh'
14:46:48 Booting Language <c> from module <>
14:46:48 Loading Module <CNULL>
14:46:48 Booting Language <builtin> from module <>
14:46:48 Loading Module <BUILTINNULL>
14:46:53 DR: DRAUTO is 0 (Off)
14:46:53 DR: ENCRYPT_HDR is 0 (HDR encryption Disabled)
14:46:53 Event notification facility epoll enabled.
14:46:53 CCFLAGS2 value set to 0x200
14:46:53 SQL_FEAT_CTRL value set to 0x8008
14:46:53 SQL_DEF_CTRL value set to 0x4b0
14:46:53 IBM Informix Dynamic Server Version 12.10.FC5DE Software Serial Number AAA#B000000
14:46:53 requested number of KAIO events (32768) exceeds limit (31437). using 31437.
14:46:54 Value of FULL_DISK_INIT has been changed to 0.
14:46:54 Performance Advisory: The physical log size is smaller than the recommended size for a
server configured with RTO_SERVER_RESTART.
14:46:54 Results: Fast recovery performance might not be optimal.
14:46:54 Action: For best fast recovery performance when RTO_SERVER_RESTART is enabled,
increase the physical log size to at least 66602 KB. For servers
configured with a large buffer pool, this might not be necessary.
14:46:54 IBM Informix Dynamic Server Initialized -- Complete Disk Initialized.
14:46:54 Started 1 B-tree scanners.
14:46:54 B-tree scanner threshold set at 5000.
14:46:54 B-tree scanner range scan size set to -1.
14:46:54 B-tree scanner ALICE mode set to 6.
14:46:54 B-tree scanner index compression level set to med.
14:46:54 Warning: Invalid (non-existent/blobspace/disabled) dbspace listed
in DBSPACETEMP: 'tempdbs'
14:46:55 The Master Daemon Died
14:46:55 invoke_alarm(): /bin/sh -c '/etc/Informix/etc/alarmprogram.sh 5 6 "Internal Subsystem failure: 'MT'" "The Master Daemon Died" "" 6069'
14:46:55 invoke_alarm(): mt_exec failed, status 32512, errno 0
14:46:55 PANIC: Attempting to bring system down
And if it helps the onconfig file the database
ROOTNAME rootdbs
ROOTPATH /home/informix_storage/rootdbs
ROOTOFFSET 0
ROOTSIZE 2000000
MIRROR 0
MIRRORPATH $INFORMIXDIR/tmp/demo_on.root_mirror
MIRROROFFSET 0
PHYSFILE 29792
PLOG_OVERFLOW_PATH $INFORMIXDIR/tmp
PHYSBUFF 512
LOGFILES 4
LOGSIZE 7168
DYNAMIC_LOGS 2
LOGBUFF 256
LTXHWM 70
LTXEHWM 80
MSGPATH /etc/Informix/informix_inst_01.log
CONSOLE $INFORMIXDIR/tmp/online.con
TBLTBLFIRST 0
TBLTBLNEXT 0
TBLSPACE_STATS 1
DBSPACETEMP tempdbs
SBSPACETEMP
SBSPACENAME sbspace
SYSSBSPACENAME
ONDBSPACEDOWN 2
SERVERNUM 0
DBSERVERNAME informix_inst_01
DBSERVERALIASES dr_informix_inst_01, lo_informix_inst_01
FULL_DISK_INIT 0
NETTYPE ipcshm,1,50,CPU
LISTEN_TIMEOUT 60
MAX_INCOMPLETE_CONNECTIONS 1024
FASTPOLL 1
NUMFDSERVERS 4
NS_CACHE host=900,service=900,user=900,group=900
MULTIPROCESSOR 1
VPCLASS cpu,num=1,noage
VP_MEMORY_CACHE_KB 0
SINGLE_CPU_VP 1
AUTO_TUNE 1
CLEANERS 2
DIRECT_IO 1
LOCKS 40000
DEF_TABLE_LOCKMODE page
RESIDENT 0
SHMBASE 0x44000000L
SHMVIRTSIZE 101376
SHMADD 3165
EXTSHMADD 8192
SHMTOTAL 0
SHMVIRT_ALLOCSEG 0,3
SHMNOACCESS
CKPTINTVL 300
RTO_SERVER_RESTART 60
BLOCKTIMEOUT 3600
CONVERSION_GUARD 2
RESTORE_POINT_DIR $INFORMIXDIR/tmp
TXTIMEOUT 300
DEADLOCK_TIMEOUT 60
HETERO_COMMIT 0
TAPEDEV /dev/null
TAPEBLK 32
TAPESIZE 0
LTAPEDEV /dev/null
LTAPEBLK 32
LTAPESIZE 0
BAR_ACT_LOG $INFORMIXDIR/tmp/bar_act.log
BAR_DEBUG_LOG $INFORMIXDIR/tmp/bar_dbug.log
BAR_DEBUG 0
BAR_MAX_BACKUP 0
BAR_RETRY 1
BAR_NB_XPORT_COUNT 20
BAR_XFER_BUF_SIZE 31
RESTARTABLE_RESTORE ON
BAR_PROGRESS_FREQ 0
BAR_BSALIB_PATH $INFORMIXDIR/lib/libbsapsm.so
BACKUP_FILTER
RESTORE_FILTER
BAR_PERFORMANCE 0
BAR_CKPTSEC_TIMEOUT 15
PSM_DBS_POOL DBSPOOL
PSM_LOG_POOL LOGPOOL
DD_HASHSIZE 31
DD_HASHMAX 10
DS_HASHSIZE 31
DS_POOLSIZE 127
PC_HASHSIZE 31
PC_POOLSIZE 127
PRELOAD_DLL_FILE
STMT_CACHE 0
STMT_CACHE_HITS 0
STMT_CACHE_SIZE 512
STMT_CACHE_NOLIMIT 0
STMT_CACHE_NUMPOOL 1
USEOSTIME 0
STACKSIZE 64
ALLOW_NEWLINE 0
USELASTCOMMITTED "NONE"
FILLFACTOR 90
MAX_FILL_DATA_PAGES 0
BTSCANNER num=1,threshold=5000,rangesize=-1,alice=6,compression=default
ONLIDX_MAXMEM 5242880
MAX_PDQPRIORITY 100
DS_MAX_QUERIES 5
DS_TOTAL_MEMORY 26214400
DS_MAX_SCANS 5
DS_NONPDQ_QUERY_MEM 1310720
DATASKIP
OPTCOMPIND 2
DIRECTIVES 1
EXT_DIRECTIVES 0
OPT_GOAL -1
IFX_FOLDVIEW 1
STATCHANGE 10
USTLOW_SAMPLE 1
BATCHEDREAD_TABLE 1
BATCHEDREAD_INDEX 1
EXPLAIN_STAT 1
IFX_EXTEND_ROLE 1
SECURITY_LOCALCONNECTION
UNSECURE_ONSTAT
ADMIN_USER_MODE_WITH_DBSA
ADMIN_MODE_USERS
SSL_KEYSTORE_LABEL
TLS_VERSION
PLCY_POOLSIZE 127
PLCY_HASHSIZE 31
USRC_POOLSIZE 127
USRC_HASHSIZE 31
SQL_LOGICAL_CHAR OFF
SEQ_CACHE_SIZE 10
ENCRYPT_HDR
ENCRYPT_SMX
ENCRYPT_CDR 0
ENCRYPT_CIPHERS
ENCRYPT_MAC
ENCRYPT_MACFILE
ENCRYPT_SWITCH
CDR_EVALTHREADS 1,2
CDR_DSLOCKWAIT 5
CDR_QUEUEMEM 4096
CDR_NIFCOMPRESS 0
CDR_SERIAL 0
CDR_DBSPACE
CDR_QHDR_DBSPACE
CDR_QDATA_SBSPACE
CDR_SUPPRESS_ATSRISWARN
CDR_DELAY_PURGE_DTC 0
CDR_LOG_LAG_ACTION ddrblock
CDR_LOG_STAGING_MAXSIZE 0
CDR_MAX_DYNAMIC_LOGS 0
GRIDCOPY_DIR $INFORMIXDIR
CDR_TSINSTANCEID 0
CDR_MAX_FLUSH_SIZE 50
CDR_AUTO_DISCOVER 0
CDR_MEM 0
DRAUTO 0
DRINTERVAL 0
HDR_TXN_SCOPE NEAR_SYNC
DRTIMEOUT 30
HA_ALIAS
HA_FOC_ORDER SDS,HDR,RSS
DRLOSTFOUND $INFORMIXDIR/etc/dr.lostfound
DRIDXAUTO 0
LOG_INDEX_BUILDS
SDS_ENABLE
SDS_TIMEOUT 20
SDS_TEMPDBS
SDS_PAGING
SDS_LOGCHECK 10
SDS_ALTERNATE NONE
SDS_FLOW_CONTROL 0
UPDATABLE_SECONDARY 0
FAILOVER_CALLBACK
FAILOVER_TX_TIMEOUT 0
TEMPTAB_NOLOG 0
DELAY_APPLY 0
STOP_APPLY 0
LOG_STAGING_DIR
RSS_FLOW_CONTROL 0
SMX_NUMPIPES 1
ENABLE_SNAPSHOT_COPY 0
SMX_COMPRESS 0
SMX_PING_INTERVAL 10
SMX_PING_RETRY 6
CLUSTER_TXN_SCOPE SERVER
ON_RECVRY_THREADS 2
OFF_RECVRY_THREADS 5
DUMPDIR $INFORMIXDIR/tmp
DUMPSHMEM 1
DUMPGCORE 0
DUMPCORE 0
DUMPCNT 1
ALARMPROGRAM $INFORMIXDIR/etc/alarmprogram.sh
ALRM_ALL_EVENTS 0
STORAGE_FULL_ALARM 600,3
SYSALARMPROGRAM $INFORMIXDIR/etc/evidence.sh
RAS_PLOG_SPEED 14896
RAS_LLOG_SPEED 0
EILSEQ_COMPAT_MODE 0
QSTATS 0
WSTATS 0
USERMAPPING OFF
SP_AUTOEXPAND 1
SP_THRESHOLD 0
SP_WAITTIME 30
AUTOLOCATE 0
DEFAULTESCCHAR \
MQSERVER
MQCHLLIB
MQCHLTAB
REMOTE_SERVER_CFG
REMOTE_USERS_CFG
S6_USE_REMOTE_SERVER_CFG 0
LOW_MEMORY_RESERVE 0
LOW_MEMORY_MGR 0
GSKIT_VERSION
INFORMIXCONTIME 60
INFORMIXCONRETRY 1
JVPPROPFILE $INFORMIXDIR/extend/krakatoa/.jvpprops
JVPLOGFILE $INFORMIXDIR/tmp/jvp.log
JVPARGS -Dcom.ibm.tools.attach.enable=no
JVPCLASSPATH INFORMIXDIR/extend/krakatoa/jdbc.jar
BUFFERPOOL default,memory='auto'
BUFFERPOOL size=2k,memory=500MB
NETTYPE onsoctcp,1,150,NET
NETTYPE drsoctcp,1,150,NET
AUTO_TUNE_SERVER_SIZE SMALL
Thank you for any help!

How to determine a LFH heap from a dump

How is it possible in Windbg to determine if a heap has enabled LFH (low-fragmentation heap) ?
Is there any differences on XP SP3 and Vista/W7/W8
EDIT:
Just discovered that last column in !heap –s shows this for all heaps.
W7:
Heap Flags Reserv Commit Virt Free List UCR Virt Lock Fast
(k) (k) (k) (k) length blocks cont. heap
-------------------------------------------------------------------------------------
0000000000310000 00000002 1024 468 1024 112 29 1 0 0 LFH
XP SP3:
Heap Flags Reserv Commit Virt Free List UCR Virt Lock Fast
(k) (k) (k) (k) length blocks cont. heap
-----------------------------------------------------------------------------
00150000 00000002 4096 3496 3536 288 24 3 0 1 L

Resources