Thanks, it works!
The init program:test with "-show_reachable -report_leak_max -1" option
7 unique, 7 total, 550 byte(s) of leak(s)
0 unique, 0 total, 0 byte(s) of possible leak(s)
122 unique, 217 total, 142596 byte(s) of still-reachable allocation(s)
total 46119(bytes) reported REACHABLE LEAK by results.txt
test with "-show_reachable -report_leak_max -1 -top_stats -dr_ops -early_inject -- ../dynamorio/bin64/create_process.exe myapp"
0 unique, 0 total, 0 byte(s) of leak(s)
0 unique, 0 total, 0 byte(s) of possible leak(s)
20 unique, 81 total, 16950 byte(s) of still-reachable allocation(s)
total 13588(bytes) reported REACHABLE LEAK by results.txt
46119+16950=63069 < 142596 (I thought the reported leaked + early_inject reported leak = total reachable leak, but the gap is too much)
Adds my patch to release memory pool memory which will release 11164 bytes
test with "-show_reachable -report_leak_max -1" option
16 unique, 16 total, 3030 byte(s) of leak(s)
0 unique, 0 total, 0 byte(s) of possible leak(s)
68 unique, 163 total, 128691 byte(s) of still-reachable allocation(s)
142596-128691=13905>11164 I don't known why Leak increate to 3030 bytes
It's really hard for me to understand why those numbers can't match, still some unknown numbers.