GitHub - archibate/mallocvis: allocation visualization in svg graph
大端字节序,数据从个十百位,地址从高到低
小端字节序,数据从个十百位,地址从低到高。little_endian
int x = 0x12345678;
int* p = &x;
char* ch = (char*)p;
if (0x5678 == *ch)
std::cout << "小端" << std::endl;
if (0x1234 == *ch)
std::cout << "大端" << std::endl;
if (std::is_signed<char>::value)
std::cout << "x86架构" << std::endl;
else
std::cout << "Arm架构" << std::endl;
正常连续内存分配
#include <vector>
int main() {
// 堆malloc
std::vector<int> memory;
for (int i = 0; i < 1000; ++i) {
memory.emplace_back(i*10);
}
return 0;
}
主动内存分配释放
#include <vector>
class A {
private:
float m_value;
int m_id;
};
int main() {
// 堆malloc
std::vector<A*> AS;
for (int i = 0; i < 1000; ++i) {
AS.emplace_back(new A());
}
// 堆free
for (int i = 0; i < 1000; ++i) {
delete AS[i];
}
AS.clear();
return 0;
}
内存泄漏
#include <vector>
class A {
private:
float m_value;
int m_id;
};
int main() {
// 堆malloc
std::vector<A*> AS;
for (int i = 0; i < 1000; ++i) {
AS.emplace_back(new A());
}
AS.clear();
return 0;
}
注:宽度表示生存时间(黑色表示泄漏),高度表示内存占用大小,颜色表示每次调用地址
GitHub - sjp38/mallochook: An example for LD_PRELOAD using function hooking
Cpp17/latex/code/lang/tracknew.hpp at master · MeouSker77/Cpp17 · GitHub