2026/1/13 11:41:12
网站建设
项目流程
仿win8 网站模版,wordpress 选单设定,校际凡科平台,网页设计与制作的理解问题分析通过跟踪生成的汇编和 gdb 的 info frame 位置。发现替换之后#xff0c;栈帧位置大幅增加了。比如对这类代码:代码语言#xff1a;javascriptAI代码解释#define LOGFMT(...) \do { …问题分析通过跟踪生成的汇编和 gdb 的info frame位置。发现替换之后栈帧位置大幅增加了。比如对这类代码:代码语言javascriptAI代码解释#define LOGFMT(...) \ do { \ auto buf get_log_buffer_addr(); \ auto size get_log_buffer_size(); \ auto fmt_res fmt::format_to_n(buf, size, __VA_ARGS__); \ if (fmt_res.size size) { \ buf[size - 1] 0; \ } else { \ buf[fmt_res.size] 0; \ } \ std::cout buf \n; \ } while(false) void func1() { //... } void func2() { //... LOGFMT(test {}, data {}, a, b); func1(); }在LOGFMT(...)宏的实现里使用fmt::format_to_n比snprintf对func1到func2的函数栈顶增量大幅增加。理论上LOGFMT()的代码都处于子作用域里无论是临时变量还是子作用域里的变量出了作用域之后应该可以释放并被复用。 但是现在各个编译器包括GCC、Clang和MSVC似乎是为了方便调试信息定位和区分变量都没有复用这部分栈空间。而在我们项目工程里有些地方使用了64K栈的协程。我改造的地方属于日志相关的模块被大量多层级使用。 这两个因素叠加以后恰好成为了压死骆驼的最后一根稻草。问题测试代码这里贴一下独立的复现和测试代码:代码语言javascriptAI代码解释// -stdc17 -O0 -g -ggdb -fno-omit-frame-pointer // /O0 /Zc:__cplusplus #include fmt/format.h #ifdef _MSC_VER # include intrin.h #endif #include iostream #include cstddef #include string #ifndef TEST_NOINLINE_NOCLONE # if defined(__clang__) # if __cplusplus 201103L # define TEST_NOINLINE_NOCLONE [[gnu::noinline]] # else # define TEST_NOINLINE_NOCLONE __attribute__((noinline)) # endif # elif defined(__GNUC__) __GNUC__ 3 # if __cplusplus 201103L (__GNUC__ * 100 __GNUC_MINOR__) 408 # define TEST_NOINLINE_NOCLONE [[gnu::noinline, gnu::noclone]] # else # define TEST_NOINLINE_NOCLONE __attribute__((noinline, noclone)) # endif # elif defined(_MSC_VER) # define TEST_NOINLINE_NOCLONE __declspec(noinline) # else # define TEST_NOINLINE_NOCLONE # endif #endif // 模拟日志代码 namespace { constexpr size_t get_log_buffer_size() { return 1 20; // 1 MiB } char* get_log_buffer_addr() { static char log_buffer[get_log_buffer_size()]; return log_buffer; } } #define LOGFMT(...) \ do { \ auto buf get_log_buffer_addr(); \ auto size get_log_buffer_size(); \ auto fmt_res fmt::format_to_n(buf, size, __VA_ARGS__); \ if (fmt_res.size size) { \ buf[size - 1] 0; \ } else { \ buf[fmt_res.size] 0; \ } \ std::cout buf \n; \ } while(false) #ifdef _MSC_VER # define TEST_TOP_FRAME_ADDR ((uintptr_t)_AddressOfReturnAddress()) #else # define TEST_TOP_FRAME_ADDR ((uintptr_t)__builtin_frame_address(0)) #endif TEST_NOINLINE_NOCLONE void func_leaf(uintptr_t top, uintptr_t previous) { uintptr_t current TEST_TOP_FRAME_ADDR; std::cout \n (LEAF) from func_no_var_no_fmt , previous offset: (previous - current) , top offset: (top - current) \n; } TEST_NOINLINE_NOCLONE void func_no_var_no_fmt(uintptr_t top, uintptr_t previous) { uintptr_t current TEST_TOP_FRAME_ADDR; std::cout \n from func_no_var_fmt_once , previous offset: (previous - current) , top offset: (top - current) \n; func_leaf(top, current); } TEST_NOINLINE_NOCLONE void func_no_var_fmt_once(uintptr_t top, uintptr_t previous) { uintptr_t current TEST_TOP_FRAME_ADDR; LOGFMT(\n{}, func_no_var_fmt_once); std::cout from func_no_var_fmt_twice , previous offset: (previous - current) , top offset: (top - current) \n; func_no_var_no_fmt(top, current); } TEST_NOINLINE_NOCLONE void func_no_var_fmt_twice(uintptr_t top, uintptr_t previous) { uintptr_t current TEST_TOP_FRAME_ADDR; LOGFMT(\n{}, func_no_var_fmt_twice); LOGFMT({}: previous offset: {}, top offset: {}, from func_int_var_fmt_once, (previous - current), (top - current)); func_no_var_fmt_once(top, current); } TEST_NOINLINE_NOCLONE void func_int_var_fmt_once(uintptr_t top, uintptr_t previous, int p1) { uintptr_t current TEST_TOP_FRAME_ADDR; volatile int p2 0; { char buf[1024]; LOGFMT(\n{}: sizeof(parameter1): {}, sizeof(stack var): {}, func_int_var_fmt_once, sizeof(p1), sizeof(p2)); } std::cout from func_int_var_fmt_twice , p2 addr: (uintptr_t)p2 , previous offset: (previous - current) , top offset: (top - current) \n; func_no_var_fmt_twice(top, current); } TEST_NOINLINE_NOCLONE void func_int_var_fmt_twice(uintptr_t top, uintptr_t previous, int p1) { uintptr_t current TEST_TOP_FRAME_ADDR; volatile int p2 0; LOGFMT(\n{}: sizeof(parameter1): {}, sizeof(stack var): {}, func_int_var_fmt_twice, sizeof(p1), sizeof(p2)); LOGFMT({}: p2 addr: {}, previous offset: {}, top offset: {}, from func_string_var_fmt_once, (uintptr_t)p2, (previous - current), (top - current)); func_int_var_fmt_once(top, current, p1); } TEST_NOINLINE_NOCLONE void func_string_var_fmt_once(uintptr_t top, uintptr_t previous, std::string p1) { uintptr_t current TEST_TOP_FRAME_ADDR; volatile std::string p2 from std::string(__FUNCTION__); LOGFMT(\n{}: sizeof(parameter1): {}, sizeof(stack var): {}, func_string_var_fmt_once, sizeof(p1), sizeof(p2)); std::cout p1 , p2 addr: (uintptr_t)p2 , previous offset: (previous - current) , top offset: (top - current) \n; func_int_var_fmt_twice(top, current, 0); } TEST_NOINLINE_NOCLONE void func_string_var_fmt_twice(uintptr_t top, uintptr_t previous, std::string p1) { uintptr_t current TEST_TOP_FRAME_ADDR; volatile std::string p2 from std::string(__FUNCTION__); LOGFMT(\n{}: sizeof(parameter1): {}, sizeof(stack var): {}, func_string_var_fmt_twice, sizeof(p1), sizeof(p2)); LOGFMT({}: p2 addr: {}: , previous offset: {}, top offset: {}, p1, (uintptr_t)p2, (previous - current), (top - current)); func_string_var_fmt_once(top, current, from func_string_var_fmt_twice); } TEST_NOINLINE_NOCLONE void func_empty(uintptr_t top, uintptr_t previous) { uintptr_t current TEST_TOP_FRAME_ADDR; volatile int p2 0; std::cout func_empty , p2 addr: (uintptr_t)p2 , previous offset: (previous - current) , top offset: (top - current) \n; func_string_var_fmt_twice(top, current, from func_empty); } int main() { uintptr_t current TEST_TOP_FRAME_ADDR; func_empty(current, current); return 0; }各个编译器的编译指令在注释里上测试运行。各个编译器的结论都差不多。 这里贴一下 Clang 20 的输出:代码语言javascriptAI代码解释func_empty, p2 addr: 140734321135460, previous offset: 32, top offset: 32 func_string_var_fmt_twice: sizeof(parameter1): 32, sizeof(stack var): 32 from func_empty: p2 addr: 140734321135184: , previous offset: 160, top offset: 192 func_string_var_fmt_once: sizeof(parameter1): 32, sizeof(stack var): 32 from func_string_var_fmt_twice, p2 addr: 140734321134664, previous offset: 576, top offset: 768 func_int_var_fmt_twice: sizeof(parameter1): 4, sizeof(stack var): 4 from func_string_var_fmt_once: p2 addr: 140734321134316, previous offset: 384, top offset: 1152 func_int_var_fmt_once: sizeof(parameter1): 4, sizeof(stack var): 4 from func_int_var_fmt_twice, p2 addr: 140734321134052, previous offset: 288, top offset: 1440 func_no_var_fmt_twice from func_int_var_fmt_once: previous offset: 176, top offset: 1616 func_no_var_fmt_once from func_no_var_fmt_twice, previous offset: 240, top offset: 1856 from func_no_var_fmt_once, previous offset: 128, top offset: 1984 (LEAF) from func_no_var_no_fmt, previous offset: 48, top offset: 2032可以看到每次调用fmt接口增量都挺大。在-O2下可能是涉及内存对齐我没有再仔细查看汇编offset会更大。解决方案这个问题我试了一些方案都无法零开销地解决这个问题。最后采用的方法是利用匿名的Lambda对象做一次中转。相当于把内存增量控制在Lambda表达式的对象本身的开销上。(直接加函数中转可能会被内联从而导致栈仍然无法被复用)按上面的代码例子就是LOGFMT(...)改成如下形式, 其他代码不变:map.dzbneyo.cn/PoTs/088802.tmLmap.dzbneyo.cn/PoTs/559931.tmLmap.dzbneyo.cn/PoTs/357513.tmLmap.dzbneyo.cn/PoTs/599133.tmLmap.dzbneyo.cn/PoTs/773973.tmLmap.dzbneyo.cn/PoTs/959395.tmLmap.dzbneyo.cn/PoTs/733553.tmLmap.dzbneyo.cn/PoTs/137173.tmLmap.dzbneyo.cn/PoTs/595157.tmLmap.dzbneyo.cn/PoTs/151755.tmLmap.dzbneyo.cn/PoTs/373391.tmLmap.dzbneyo.cn/PoTs/593179.tmLmap.dzbneyo.cn/PoTs/931599.tmLmap.dzbneyo.cn/PoTs/939533.tmLmap.dzbneyo.cn/PoTs/115919.tmLmap.dzbneyo.cn/PoTs/175979.tmLmap.dzbneyo.cn/PoTs/973531.tmLmap.dzbneyo.cn/PoTs/393933.tmLmap.dzbneyo.cn/PoTs/717939.tmLmap.dzbneyo.cn/PoTs/737751.tmLmap.dzbneyo.cn/PoTs/799379.tmLmap.dzbneyo.cn/PoTs/199971.tmLmap.dzbneyo.cn/PoTs/791533.tmLmap.dzbneyo.cn/PoTs/533577.tmLmap.dzbneyo.cn/PoTs/193515.tmLmap.dzbneyo.cn/PoTs/193159.tmLmap.dzbneyo.cn/PoTs/517331.tmLmap.dzbneyo.cn/PoTs/973113.tmLmap.dzbneyo.cn/PoTs/393971.tmLmap.dzbneyo.cn/PoTs/929191.tmLmap.dzbneyo.cn/PoTs/551757.tmLmap.dzbneyo.cn/PoTs/351353.tmLmap.dzbneyo.cn/PoTs/591379.tmLmap.dzbneyo.cn/PoTs/397717.tmLmap.dzbneyo.cn/PoTs/799317.tmLmap.dzbneyo.cn/PoTs/915737.tmLmap.dzbneyo.cn/PoTs/359371.tmLmap.dzbneyo.cn/PoTs/551331.tmLmap.dzbneyo.cn/PoTs/991173.tmLmap.dzbneyo.cn/PoTs/591579.tmLmap.dzbneyo.cn/PoTs/719933.tmLmap.dzbneyo.cn/PoTs/355751.tmLmap.dzbneyo.cn/PoTs/775751.tmLmap.dzbneyo.cn/PoTs/155373.tmLmap.dzbneyo.cn/PoTs/779573.tmLmap.dzbneyo.cn/PoTs/951755.tmLmap.dzbneyo.cn/PoTs/735115.tmLmap.dzbneyo.cn/PoTs/591739.tmLmap.dzbneyo.cn/PoTs/177359.tmLmap.dzbneyo.cn/PoTs/753331.tmLmap.dzbneyo.cn/PoTs/937333.tmLmap.dzbneyo.cn/PoTs/519339.tmLmap.dzbneyo.cn/PoTs/935753.tmLmap.dzbneyo.cn/PoTs/919555.tmLmap.dzbneyo.cn/PoTs/997399.tmLmap.dzbneyo.cn/PoTs/937973.tmLmap.dzbneyo.cn/PoTs/111175.tmLmap.dzbneyo.cn/PoTs/791339.tmLmap.dzbneyo.cn/PoTs/793915.tmLmap.dzbneyo.cn/PoTs/351993.tmLmap.dzbneyo.cn/PoTs/717997.tmLmap.dzbneyo.cn/PoTs/997197.tmLmap.dzbneyo.cn/PoTs/715953.tmLmap.dzbneyo.cn/PoTs/975573.tmLmap.dzbneyo.cn/PoTs/997391.tmLmap.dzbneyo.cn/PoTs/531737.tmLmap.dzbneyo.cn/PoTs/799575.tmLmap.dzbneyo.cn/PoTs/939939.tmLmap.dzbneyo.cn/PoTs/951573.tmLmap.dzbneyo.cn/PoTs/137355.tmLmap.dzbneyo.cn/PoTs/177919.tmLmap.dzbneyo.cn/PoTs/397375.tmLmap.dzbneyo.cn/PoTs/117735.tmLmap.dzbneyo.cn/PoTs/913759.tmLmap.dzbneyo.cn/PoTs/977577.tmLmap.dzbneyo.cn/PoTs/739559.tmLmap.dzbneyo.cn/PoTs/951735.tmLmap.dzbneyo.cn/PoTs/357511.tmLmap.dzbneyo.cn/PoTs/993771.tmLmap.dzbneyo.cn/PoTs/599117.tmLmap.dzbneyo.cn/PoTs/957339.tmLmap.dzbneyo.cn/PoTs/931359.tmLmap.dzbneyo.cn/PoTs/737393.tmLmap.dzbneyo.cn/PoTs/197359.tmLmap.dzbneyo.cn/PoTs/939111.tmLmap.dzbneyo.cn/PoTs/313735.tmLmap.dzbneyo.cn/PoTs/139715.tmLmap.dzbneyo.cn/PoTs/959719.tmLmap.dzbneyo.cn/PoTs/711735.tmLmap.dzbneyo.cn/PoTs/737575.tmLmap.dzbneyo.cn/PoTs/715177.tmLmap.dzbneyo.cn/PoTs/775911.tmLmap.dzbneyo.cn/PoTs/793373.tmLmap.dzbneyo.cn/PoTs/979331.tmLmap.dzbneyo.cn/PoTs/933773.tmLmap.dzbneyo.cn/PoTs/137739.tmLmap.dzbneyo.cn/PoTs/377799.tmLmap.dzbneyo.cn/PoTs/719955.tmLmap.dzbneyo.cn/PoTs/355559.tmLmap.dzbneyo.cn/PoTs/131951.tmLmap.dzbneyo.cn/PoTs/377373.tmLmap.dzbneyo.cn/PoTs/777593.tmLmap.dzbneyo.cn/PoTs/911511.tmLmap.dzbneyo.cn/PoTs/139139.tmLmap.dzbneyo.cn/PoTs/951753.tmLmap.dzbneyo.cn/PoTs/991975.tmLmap.dzbneyo.cn/PoTs/753371.tmLmap.dzbneyo.cn/PoTs/317151.tmLmap.dzbneyo.cn/PoTs/951939.tmLmap.dzbneyo.cn/PoTs/751931.tmLmap.dzbneyo.cn/PoTs/533777.tmLmap.dzbneyo.cn/PoTs/951979.tmLmap.dzbneyo.cn/PoTs/177797.tmLmap.dzbneyo.cn/PoTs/799771.tmLmap.dzbneyo.cn/PoTs/395795.tmLmap.dzbneyo.cn/PoTs/119995.tmLmap.dzbneyo.cn/PoTs/555979.tmLmap.dzbneyo.cn/PoTs/997317.tmLmap.dzbneyo.cn/PoTs/535357.tmLmap.dzbneyo.cn/PoTs/799557.tmLmap.dzbneyo.cn/PoTs/731539.tmLmap.dzbneyo.cn/PoTs/155139.tmLmap.dzbneyo.cn/PoTs/515373.tmLmap.dzbneyo.cn/PoTs/311791.tmLmap.dzbneyo.cn/PoTs/533775.tmLmap.dzbneyo.cn/PoTs/993795.tmLmap.dzbneyo.cn/PoTs/715371.tmLmap.dzbneyo.cn/PoTs/535591.tmLmap.dzbneyo.cn/PoTs/973517.tmLmap.dzbneyo.cn/PoTs/799953.tmLmap.dzbneyo.cn/PoTs/135155.tmLmap.dzbneyo.cn/PoTs/919135.tmLmap.dzbneyo.cn/PoTs/399113.tmLmap.dzbneyo.cn/PoTs/559551.tmLmap.dzbneyo.cn/PoTs/311335.tmLmap.dzbneyo.cn/PoTs/999519.tmLmap.dzbneyo.cn/PoTs/331719.tmLmap.dzbneyo.cn/PoTs/995577.tmLmap.dzbneyo.cn/PoTs/379377.tmLmap.dzbneyo.cn/PoTs/591377.tmLmap.dzbneyo.cn/PoTs/919131.tmLmap.dzbneyo.cn/PoTs/555551.tmLmap.dzbneyo.cn/PoTs/519937.tmLmap.dzbneyo.cn/PoTs/791793.tmLmap.dzbneyo.cn/PoTs/715313.tmLmap.dzbneyo.cn/PoTs/335113.tmLmap.dzbneyo.cn/PoTs/915151.tmLmap.dzbneyo.cn/PoTs/177317.tmLmap.dzbneyo.cn/PoTs/719137.tmLmap.dzbneyo.cn/PoTs/931511.tmLmap.dzbneyo.cn/PoTs/115153.tmLmap.dzbneyo.cn/PoTs/593311.tmLmap.dzbneyo.cn/PoTs/951751.tmLmap.dzbneyo.cn/PoTs/735353.tmLmap.dzbneyo.cn/PoTs/979399.tmLmap.dzbneyo.cn/PoTs/337533.tmLmap.dzbneyo.cn/PoTs/337373.tmLmap.dzbneyo.cn/PoTs/175151.tmLmap.dzbneyo.cn/PoTs/775555.tmLmap.dzbneyo.cn/PoTs/957775.tmLmap.dzbneyo.cn/PoTs/355597.tmLmap.dzbneyo.cn/PoTs/317379.tmLmap.dzbneyo.cn/PoTs/131373.tmLmap.dzbneyo.cn/PoTs/151971.tmLmap.dzbneyo.cn/PoTs/393117.tmLmap.dzbneyo.cn/PoTs/577335.tmLmap.dzbneyo.cn/PoTs/177531.tmLmap.dzbneyo.cn/PoTs/779351.tmLmap.dzbneyo.cn/PoTs/335157.tmLmap.dzbneyo.cn/PoTs/757377.tmLmap.dzbneyo.cn/PoTs/199175.tmLmap.dzbneyo.cn/PoTs/357399.tmLmap.dzbneyo.cn/PoTs/517573.tmLmap.dzbneyo.cn/PoTs/791519.tmLmap.dzbneyo.cn/PoTs/739357.tmLmap.dzbneyo.cn/PoTs/137551.tmLmap.dzbneyo.cn/PoTs/775771.tmLmap.dzbneyo.cn/PoTs/591339.tmLmap.dzbneyo.cn/PoTs/557153.tmLmap.dzbneyo.cn/PoTs/357337.tmLmap.dzbneyo.cn/PoTs/771717.tmLmap.dzbneyo.cn/PoTs/137115.tmLmap.dzbneyo.cn/PoTs/539115.tmLmap.dzbneyo.cn/PoTs/713713.tmLmap.dzbneyo.cn/PoTs/539171.tmLmap.dzbneyo.cn/PoTs/551335.tmLmap.dzbneyo.cn/PoTs/197571.tmLmap.dzbneyo.cn/PoTs/933155.tmLmap.dzbneyo.cn/PoTs/531359.tmLmap.dzbneyo.cn/PoTs/999739.tmLmap.dzbneyo.cn/PoTs/153559.tmLmap.dzbneyo.cn/PoTs/973599.tmLmap.dzbneyo.cn/PoTs/193319.tmLmap.dzbneyo.cn/PoTs/519793.tmLmap.dzbneyo.cn/PoTs/151931.tmLmap.dzbneyo.cn/PoTs/575117.tmLmap.dzbneyo.cn/PoTs/539193.tmLmap.dzbneyo.cn/PoTs/579317.tmLmap.dzbneyo.cn/PoTs/779139.tmLmap.mdugfua.cn/PoTs/593977.tmLmap.mdugfua.cn/PoTs/999795.tmLmap.mdugfua.cn/PoTs/715599.tmLmap.mdugfua.cn/PoTs/139373.tmLmap.mdugfua.cn/PoTs/715371.tmLmap.mdugfua.cn/PoTs/931195.tmLmap.mdugfua.cn/PoTs/775151.tmLmap.mdugfua.cn/PoTs/731599.tmLmap.mdugfua.cn/PoTs/537577.tmLmap.mdugfua.cn/PoTs/971115.tmLmap.mdugfua.cn/PoTs/739131.tmLmap.mdugfua.cn/PoTs/555733.tmLmap.mdugfua.cn/PoTs/593577.tmLmap.mdugfua.cn/PoTs/153373.tmLmap.mdugfua.cn/PoTs/979195.tmLmap.mdugfua.cn/PoTs/797519.tmLmap.mdugfua.cn/PoTs/757351.tmLmap.mdugfua.cn/PoTs/735799.tmLmap.mdugfua.cn/PoTs/117751.tmLmap.mdugfua.cn/PoTs/117557.tmLmap.mdugfua.cn/PoTs/151771.tmLmap.mdugfua.cn/PoTs/317157.tmLmap.mdugfua.cn/PoTs/755533.tmLmap.mdugfua.cn/PoTs/335197.tmLmap.mdugfua.cn/PoTs/553933.tmLmap.mdugfua.cn/PoTs/159999.tmLmap.mdugfua.cn/PoTs/197559.tmLmap.mdugfua.cn/PoTs/357915.tmLmap.mdugfua.cn/PoTs/955157.tmLmap.mdugfua.cn/PoTs/771757.tmLmap.mdugfua.cn/PoTs/171531.tmLmap.mdugfua.cn/PoTs/573553.tmLmap.mdugfua.cn/PoTs/573975.tmLmap.mdugfua.cn/PoTs/399339.tmLmap.mdugfua.cn/PoTs/797577.tmLmap.mdugfua.cn/PoTs/753977.tmLmap.mdugfua.cn/PoTs/159737.tmLmap.mdugfua.cn/PoTs/379393.tmLmap.mdugfua.cn/PoTs/751535.tmLmap.mdugfua.cn/PoTs/199179.tmLmap.mdugfua.cn/PoTs/733153.tmLmap.mdugfua.cn/PoTs/151179.tmLmap.mdugfua.cn/PoTs/539997.tmLmap.mdugfua.cn/PoTs/551311.tmLmap.mdugfua.cn/PoTs/957513.tmLmap.mdugfua.cn/PoTs/359315.tmLmap.mdugfua.cn/PoTs/733375.tmLmap.mdugfua.cn/PoTs/975759.tmLmap.mdugfua.cn/PoTs/953335.tmLmap.mdugfua.cn/PoTs/535757.tmLmap.mdugfua.cn/PoTs/997379.tmLmap.mdugfua.cn/PoTs/317997.tmLmap.mdugfua.cn/PoTs/951115.tmLmap.mdugfua.cn/PoTs/337399.tmLmap.mdugfua.cn/PoTs/333555.tmLmap.mdugfua.cn/PoTs/955533.tmLmap.mdugfua.cn/PoTs/371371.tmLmap.mdugfua.cn/PoTs/191591.tmLmap.mdugfua.cn/PoTs/937393.tmLmap.mdugfua.cn/PoTs/715737.tmLmap.mdugfua.cn/PoTs/155915.tmLmap.mdugfua.cn/PoTs/351915.tmLmap.mdugfua.cn/PoTs/935599.tmLmap.mdugfua.cn/PoTs/931757.tmLmap.mdugfua.cn/PoTs/117733.tmLmap.mdugfua.cn/PoTs/993351.tmLmap.mdugfua.cn/PoTs/515331.tmLmap.mdugfua.cn/PoTs/175539.tmLmap.mdugfua.cn/PoTs/193131.tmLmap.mdugfua.cn/PoTs/995913.tmLmap.mdugfua.cn/PoTs/553935.tmLmap.mdugfua.cn/PoTs/515115.tmLmap.mdugfua.cn/PoTs/955511.tmLmap.mdugfua.cn/PoTs/711597.tmLmap.mdugfua.cn/PoTs/379173.tmLmap.mdugfua.cn/PoTs/951553.tmLmap.mdugfua.cn/PoTs/222228.tmLmap.mdugfua.cn/PoTs/919175.tmLmap.mdugfua.cn/PoTs/313513.tmLmap.mdugfua.cn/PoTs/082024.tmLmap.mdugfua.cn/PoTs/175355.tmLmap.mdugfua.cn/PoTs/866844.tmLmap.mdugfua.cn/PoTs/733795.tmLmap.mdugfua.cn/PoTs/775797.tmLmap.mdugfua.cn/PoTs/595553.tmLmap.mdugfua.cn/PoTs/793791.tmLmap.mdugfua.cn/PoTs/995919.tmLmap.mdugfua.cn/PoTs/777157.tmLmap.mdugfua.cn/PoTs/040480.tmLmap.mdugfua.cn/PoTs/624224.tmLmap.mdugfua.cn/PoTs/995991.tmLmap.mdugfua.cn/PoTs/571751.tmLmap.mdugfua.cn/PoTs/913753.tmLmap.mdugfua.cn/PoTs/191799.tmLmap.mdugfua.cn/PoTs/373979.tmLmap.mdugfua.cn/PoTs/171155.tmLmap.mdugfua.cn/PoTs/559371.tmLmap.mdugfua.cn/PoTs/399519.tmLmap.mdugfua.cn/PoTs/915395.tmLmap.mdugfua.cn/PoTs/995515.tmLmap.mdugfua.cn/PoTs/537919.tmLmap.mdugfua.cn/PoTs/951519.tmLmap.mdugfua.cn/PoTs/153579.tmLmap.mdugfua.cn/PoTs/991335.tmLmap.mdugfua.cn/PoTs/915759.tmLmap.mdugfua.cn/PoTs/113791.tmLmap.mdugfua.cn/PoTs/379577.tmLmap.mdugfua.cn/PoTs/733319.tmLmap.mdugfua.cn/PoTs/111919.tmLmap.mdugfua.cn/PoTs/244082.tmLmap.mdugfua.cn/PoTs/351997.tmLmap.mdugfua.cn/PoTs/733717.tmLmap.mdugfua.cn/PoTs/753311.tmLmap.mdugfua.cn/PoTs/755391.tmLmap.mdugfua.cn/PoTs/177753.tmLmap.mdugfua.cn/PoTs/757359.tmLmap.mdugfua.cn/PoTs/753711.tmLmap.mdugfua.cn/PoTs/179737.tmLmap.mdugfua.cn/PoTs/199779.tmLmap.mdugfua.cn/PoTs/711557.tmLmap.mdugfua.cn/PoTs/713737.tmLmap.mdugfua.cn/PoTs/551991.tmLmap.mdugfua.cn/PoTs/555519.tmLmap.mdugfua.cn/PoTs/555955.tmLmap.mdugfua.cn/PoTs/193115.tmLmap.mdugfua.cn/PoTs/739793.tmLmap.mdugfua.cn/PoTs/113739.tmLmap.mdugfua.cn/PoTs/717515.tmLmap.mdugfua.cn/PoTs/971157.tmLmap.mdugfua.cn/PoTs/177777.tmLmap.mdugfua.cn/PoTs/999515.tmLmap.mdugfua.cn/PoTs/733397.tmLmap.mdugfua.cn/PoTs/317915.tmLmap.mdugfua.cn/PoTs/199339.tmLmap.mdugfua.cn/PoTs/113177.tmLmap.mdugfua.cn/PoTs/537159.tmLmap.mdugfua.cn/PoTs/135771.tmLmap.mdugfua.cn/PoTs/008466.tmLmap.mdugfua.cn/PoTs/997359.tmLmap.mdugfua.cn/PoTs/571397.tmLmap.mdugfua.cn/PoTs/913533.tmLmap.mdugfua.cn/PoTs/713353.tmLmap.mdugfua.cn/PoTs/391393.tmLmap.mdugfua.cn/PoTs/595551.tmLmap.mdugfua.cn/PoTs/915933.tmLmap.mdugfua.cn/PoTs/339113.tmLmap.mdugfua.cn/PoTs/379799.tmLmap.mdugfua.cn/PoTs/971375.tmLmap.mdugfua.cn/PoTs/735579.tmLmap.mdugfua.cn/PoTs/353193.tmLmap.mdugfua.cn/PoTs/559111.tmLmap.mdugfua.cn/PoTs/191193.tmLmap.mdugfua.cn/PoTs/533735.tmLmap.mdugfua.cn/PoTs/353133.tmLmap.mdugfua.cn/PoTs/755191.tmLmap.mdugfua.cn/PoTs/771531.tmLmap.mdugfua.cn/PoTs/595557.tmLmap.mdugfua.cn/PoTs/173599.tmLmap.mdugfua.cn/PoTs/375791.tmLmap.mdugfua.cn/PoTs/951779.tmLmap.mdugfua.cn/PoTs/775159.tmLmap.mdugfua.cn/PoTs/759571.tmLmap.mdugfua.cn/PoTs/915319.tmLmap.mdugfua.cn/PoTs/197991.tmLmap.mdugfua.cn/PoTs/517371.tmLmap.mdugfua.cn/PoTs/355913.tmLmap.mdugfua.cn/PoTs/975175.tmLmap.mdugfua.cn/PoTs/319777.tmLmap.mdugfua.cn/PoTs/515717.tmLmap.mdugfua.cn/PoTs/711319.tmLmap.mdugfua.cn/PoTs/597199.tmLmap.mdugfua.cn/PoTs/175531.tmLmap.mdugfua.cn/PoTs/199751.tmLmap.mdugfua.cn/PoTs/335395.tmLmap.mdugfua.cn/PoTs/935579.tmLmap.mdugfua.cn/PoTs/339155.tmLmap.mdugfua.cn/PoTs/339711.tmLmap.mdugfua.cn/PoTs/779197.tmLmap.mdugfua.cn/PoTs/157515.tmLmap.mdugfua.cn/PoTs/375793.tmLmap.mdugfua.cn/PoTs/799119.tmLmap.mdugfua.cn/PoTs/751553.tmLmap.mdugfua.cn/PoTs/779195.tmLmap.mdugfua.cn/PoTs/933339.tmLmap.mdugfua.cn/PoTs/911975.tmLmap.mdugfua.cn/PoTs/577995.tmLmap.mdugfua.cn/PoTs/319791.tmLmap.mdugfua.cn/PoTs/591931.tmLmap.mdugfua.cn/PoTs/355935.tmLmap.mdugfua.cn/PoTs/915111.tmLmap.mdugfua.cn/PoTs/595773.tmLmap.mdugfua.cn/PoTs/573119.tmLmap.mdugfua.cn/PoTs/999771.tmLmap.mdugfua.cn/PoTs/751155.tmLmap.mdugfua.cn/PoTs/971395.tmLmap.mdugfua.cn/PoTs/535359.tmLmap.mdugfua.cn/PoTs/177533.tmLmap.mdugfua.cn/PoTs/935193.tmLmap.mdugfua.cn/PoTs/593997.tmLmap.fuemazt.cn/PoTs/951179.tmLmap.fuemazt.cn/PoTs/511571.tmLmap.fuemazt.cn/PoTs/793317.tmLmap.fuemazt.cn/PoTs/711711.tmLmap.fuemazt.cn/PoTs/919179.tmLmap.fuemazt.cn/PoTs/911951.tmLmap.fuemazt.cn/PoTs/111191.tmLmap.fuemazt.cn/PoTs/797159.tmLmap.fuemazt.cn/PoTs/753195.tmLmap.fuemazt.cn/PoTs/155931.tmLmap.fuemazt.cn/PoTs/393595.tmLmap.fuemazt.cn/PoTs/911955.tmLmap.fuemazt.cn/PoTs/999175.tmLmap.fuemazt.cn/PoTs/935957.tmLmap.fuemazt.cn/PoTs/739973.tmLmap.fuemazt.cn/PoTs/537919.tmLmap.fuemazt.cn/PoTs/515377.tmLmap.fuemazt.cn/PoTs/979173.tmLmap.fuemazt.cn/PoTs/739333.tmLmap.fuemazt.cn/PoTs/719337.tmLmap.fuemazt.cn/PoTs/393353.tmLmap.fuemazt.cn/PoTs/377115.tmLmap.fuemazt.cn/PoTs/111955.tmLmap.fuemazt.cn/PoTs/199191.tmLmap.fuemazt.cn/PoTs/539555.tmLmap.fuemazt.cn/PoTs/915735.tmLmap.fuemazt.cn/PoTs/793715.tmLmap.fuemazt.cn/PoTs/939913.tmLmap.fuemazt.cn/PoTs/771159.tmLmap.fuemazt.cn/PoTs/399939.tmLmap.fuemazt.cn/PoTs/915393.tmLmap.fuemazt.cn/PoTs/337155.tmLmap.fuemazt.cn/PoTs/919117.tmLmap.fuemazt.cn/PoTs/739971.tmLmap.fuemazt.cn/PoTs/133333.tmLmap.fuemazt.cn/PoTs/995919.tmLmap.fuemazt.cn/PoTs/157737.tmLmap.fuemazt.cn/PoTs/551359.tmLmap.fuemazt.cn/PoTs/575755.tmLmap.fuemazt.cn/PoTs/391799.tmLmap.fuemazt.cn/PoTs/959315.tmLmap.fuemazt.cn/PoTs/593533.tmLmap.fuemazt.cn/PoTs/173977.tmLmap.fuemazt.cn/PoTs/399779.tmLmap.fuemazt.cn/PoTs/573139.tmLmap.fuemazt.cn/PoTs/557759.tmLmap.fuemazt.cn/PoTs/797137.tmLmap.fuemazt.cn/PoTs/179717.tmLmap.fuemazt.cn/PoTs/957557.tmLmap.fuemazt.cn/PoTs/357593.tmLmap.fuemazt.cn/PoTs/935375.tmLmap.fuemazt.cn/PoTs/555919.tmLmap.fuemazt.cn/PoTs/995399.tmLmap.fuemazt.cn/PoTs/935171.tmLmap.fuemazt.cn/PoTs/159157.tmLmap.fuemazt.cn/PoTs/199719.tmLmap.fuemazt.cn/PoTs/733119.tmLmap.fuemazt.cn/PoTs/339935.tmLmap.fuemazt.cn/PoTs/935511.tmLmap.fuemazt.cn/PoTs/777993.tmLmap.fuemazt.cn/PoTs/773397.tmLmap.fuemazt.cn/PoTs/917337.tmLmap.fuemazt.cn/PoTs/913993.tmLmap.fuemazt.cn/PoTs/317933.tmLmap.fuemazt.cn/PoTs/333739.tmLmap.fuemazt.cn/PoTs/157539.tmLmap.fuemazt.cn/PoTs/535177.tmLmap.fuemazt.cn/PoTs/777399.tmLmap.fuemazt.cn/PoTs/317555.tmLmap.fuemazt.cn/PoTs/599795.tmLmap.fuemazt.cn/PoTs/155511.tmLmap.fuemazt.cn/PoTs/715153.tmLmap.fuemazt.cn/PoTs/751957.tmLmap.fuemazt.cn/PoTs/119797.tmLmap.fuemazt.cn/PoTs/999177.tmLmap.fuemazt.cn/PoTs/993779.tmLmap.fuemazt.cn/PoTs/335195.tmLmap.fuemazt.cn/PoTs/533919.tmLmap.fuemazt.cn/PoTs/131711.tmLmap.fuemazt.cn/PoTs/137773.tmLmap.fuemazt.cn/PoTs/179131.tmLmap.fuemazt.cn/PoTs/377993.tmLmap.fuemazt.cn/PoTs/159593.tmLmap.fuemazt.cn/PoTs/793977.tmLmap.fuemazt.cn/PoTs/717159.tmLmap.fuemazt.cn/PoTs/557957.tmLmap.fuemazt.cn/PoTs/599551.tmLmap.fuemazt.cn/PoTs/771539.tmLmap.fuemazt.cn/PoTs/753971.tmLmap.fuemazt.cn/PoTs/959791.tmLmap.fuemazt.cn/PoTs/393173.tmLmap.fuemazt.cn/PoTs/713397.tmLmap.fuemazt.cn/PoTs/755971.tmLmap.fuemazt.cn/PoTs/111111.tmLmap.fuemazt.cn/PoTs/713799.tmLmap.fuemazt.cn/PoTs/519973.tmLmap.fuemazt.cn/PoTs/395713.tmLmap.fuemazt.cn/PoTs/997377.tmLmap.fuemazt.cn/PoTs/179979.tmLmap.fuemazt.cn/PoTs/999157.tmLmap.fuemazt.cn/PoTs/731735.tmLmap.fuemazt.cn/PoTs/515931.tmLmap.fuemazt.cn/PoTs/717715.tmLmap.fuemazt.cn/PoTs/715377.tmLmap.fuemazt.cn/PoTs/759593.tmLmap.fuemazt.cn/PoTs/377197.tmLmap.fuemazt.cn/PoTs/731517.tmLmap.fuemazt.cn/PoTs/979371.tmLmap.fuemazt.cn/PoTs/513979.tmLmap.fuemazt.cn/PoTs/915559.tmLmap.fuemazt.cn/PoTs/597935.tmLmap.fuemazt.cn/PoTs/931735.tmLmap.fuemazt.cn/PoTs/755175.tmLmap.fuemazt.cn/PoTs/373951.tmLmap.fuemazt.cn/PoTs/933719.tmLmap.fuemazt.cn/PoTs/139997.tmLmap.fuemazt.cn/PoTs/199737.tmLmap.fuemazt.cn/PoTs/971715.tmLmap.fuemazt.cn/PoTs/111399.tmLmap.fuemazt.cn/PoTs/993317.tmLmap.fuemazt.cn/PoTs/355593.tmLmap.fuemazt.cn/PoTs/173331.tmLmap.fuemazt.cn/PoTs/739195.tmLmap.fuemazt.cn/PoTs/371131.tmLmap.fuemazt.cn/PoTs/957131.tmLmap.fuemazt.cn/PoTs/173977.tmLmap.fuemazt.cn/PoTs/555751.tmLmap.fuemazt.cn/PoTs/557955.tmLmap.fuemazt.cn/PoTs/115393.tmLmap.fuemazt.cn/PoTs/953595.tmLmap.fuemazt.cn/PoTs/579755.tmLmap.fuemazt.cn/PoTs/795359.tmLmap.fuemazt.cn/PoTs/793577.tmLmap.fuemazt.cn/PoTs/711557.tmLmap.fuemazt.cn/PoTs/597533.tmLmap.fuemazt.cn/PoTs/131915.tmLmap.fuemazt.cn/PoTs/773331.tmLmap.fuemazt.cn/PoTs/991915.tmLmap.fuemazt.cn/PoTs/117135.tmLmap.fuemazt.cn/PoTs/733373.tmLmap.fuemazt.cn/PoTs/951991.tmLmap.fuemazt.cn/PoTs/179759.tmLmap.fuemazt.cn/PoTs/373515.tmLmap.fuemazt.cn/PoTs/115993.tmLmap.fuemazt.cn/PoTs/917537.tmLmap.fuemazt.cn/PoTs/511755.tmLmap.fuemazt.cn/PoTs/579731.tmLmap.fuemazt.cn/PoTs/555951.tmLmap.fuemazt.cn/PoTs/395991.tmLmap.fuemazt.cn/PoTs/537539.tmLmap.fuemazt.cn/PoTs/531359.tmLmap.fuemazt.cn/PoTs/939997.tmLmap.fuemazt.cn/PoTs/199739.tmLmap.fuemazt.cn/PoTs/713559.tmLmap.fuemazt.cn/PoTs/511395.tmLmap.fuemazt.cn/PoTs/991931.tmLmap.fuemazt.cn/PoTs/333357.tmLmap.fuemazt.cn/PoTs/153173.tmLmap.fuemazt.cn/PoTs/551799.tmLmap.fuemazt.cn/PoTs/773579.tmLmap.fuemazt.cn/PoTs/131311.tmLmap.fuemazt.cn/PoTs/155373.tmLmap.fuemazt.cn/PoTs/193537.tmLmap.fuemazt.cn/PoTs/591711.tmLmap.fuemazt.cn/PoTs/319991.tmLmap.fuemazt.cn/PoTs/319757.tmLmap.fuemazt.cn/PoTs/557733.tmLmap.fuemazt.cn/PoTs/137175.tmLmap.fuemazt.cn/PoTs/751993.tmLmap.fuemazt.cn/PoTs/751571.tmLmap.fuemazt.cn/PoTs/313375.tmLmap.fuemazt.cn/PoTs/735171.tmLmap.fuemazt.cn/PoTs/797795.tmLmap.fuemazt.cn/PoTs/599933.tmLmap.fuemazt.cn/PoTs/535731.tmLmap.fuemazt.cn/PoTs/719113.tmLmap.fuemazt.cn/PoTs/511577.tmLmap.fuemazt.cn/PoTs/797115.tmLmap.fuemazt.cn/PoTs/557355.tmLmap.fuemazt.cn/PoTs/115155.tmLmap.fuemazt.cn/PoTs/571513.tmLmap.fuemazt.cn/PoTs/179379.tmLmap.fuemazt.cn/PoTs/597939.tmLmap.fuemazt.cn/PoTs/539913.tmLmap.fuemazt.cn/PoTs/975575.tmLmap.fuemazt.cn/PoTs/599173.tmLmap.fuemazt.cn/PoTs/957713.tmLmap.fuemazt.cn/PoTs/317335.tmLmap.fuemazt.cn/PoTs/135937.tmLmap.fuemazt.cn/PoTs/537191.tmLmap.fuemazt.cn/PoTs/315757.tmLmap.fuemazt.cn/PoTs/579117.tmLmap.fuemazt.cn/PoTs/717355.tmLmap.fuemazt.cn/PoTs/191595.tmLmap.fuemazt.cn/PoTs/751777.tmLmap.fuemazt.cn/PoTs/171319.tmLmap.fuemazt.cn/PoTs/553713.tmLmap.fuemazt.cn/PoTs/951779.tmLmap.fuemazt.cn/PoTs/311975.tmL