本人写数据结构有个坏习惯,喜欢把该数据结构相关的所有变量、数组、函数放在一个结构体里,如:
struct segment_tree {
int val[N << 2], lazy[N << 2];
void modify(...) { ... }
int query(...) { ...}
} sgt;
今天偶然发现如果用命名空间而非结构体封装,运行内存会小很多(同一道题,struct 180MB,namespace 140MB),如:
namespace sgt {
int val[N << 2], lazy[N << 2];
void modify(...) { ... }
int query(...) { ...}
}
经测试,两种版本的程序静态内存相同,也没有使用 new、alloc 之类动态分配内存,那只能是栈内存的区别?请问对这个现象有什么解释吗?或者能不能科普一下程序运行内存(除开静态内存外)到底是怎么算的?