Skip to content
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ define clean_main_file
rm -f ${MAIN_FILE_BASE}.aux $(MAIN_FILE_DEPS:%.tex=%.aux)
rm -f ${MAIN_FILE_BASE}.log ${MAIN_FILE_BASE}.out
rm -f ${MAIN_FILE_BASE}.pdf ${MAIN_FILE_BASE}.toc
rm -f ${MAIN_FILE_BASE}-*.{asy,pdf,pre,tex}
rm -rf _minted-${MAIN_FILE_BASE}
endef

Expand All @@ -23,6 +24,7 @@ all: ${MAIN_FILE_BASE}.pdf ${HOW_TO_BASE}.pdf
${MAIN_FILE_BASE}.pdf: ${MAIN_FILE_BASE}.tex ${MAIN_FILE_DEPS}
$(call clean_main_file)
${TEX_CMD} --interaction=nonstopmode --halt-on-error --shell-escape ${MAIN_FILE_BASE}.tex
find -name '${MAIN_FILE_BASE}-*.asy' -print0 | xargs -0 asy
${TEX_CMD} --interaction=nonstopmode --halt-on-error --shell-escape ${MAIN_FILE_BASE}.tex

${HOW_TO_BASE}.pdf: ${HOW_TO_BASE}.tex
Expand Down
177 changes: 177 additions & 0 deletions asy_files/alloc.asy
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
settings.outformat = "pdf";

real linked = 221;
real shared = 572;
real intrusive = 214;
real unique = 239;
real linked_disp = 0;
real shared_disp = 2;
real intrusive_disp = 8;
real unique_disp = 6;real bench_width = 312.0;
real max_height = 572;

real arrow_offset = bench_width / 4.0 * 1.1;
real point_offset = arrow_offset * 2 / 3;
real linked_offset = arrow_offset + bench_width;
real shared_offset = arrow_offset + 2 * bench_width;
real intrusive_offset = arrow_offset + 3 * bench_width;
real unique_offset = arrow_offset + 4 * bench_width;
real label_offset = (shared_offset - linked_offset) / 2.0;

size(20cm,0);
draw((arrow_offset / 2, 0) -- (arrow_offset / 2, max_height),arrow=Arrow);

label(
scale(0.5) * ("" + string(linked) + ""),
(point_offset, linked),
black
);
label(
scale(0.5) * ("" + string(shared) + ""),
(point_offset, shared),
black
);
label(
scale(0.5) * ("" + string(intrusive) + ""),
(point_offset, intrusive),
black
);
label(
scale(0.5) * ("" + string(unique) + ""),
(point_offset, unique),
black
);
path lin = box((arrow_offset,0), (linked_offset,linked));
fill(lin, deepgreen);

path sha = box((linked_offset,0), (shared_offset,shared));
fill(sha, royalblue);

path intr = box((shared_offset,0), (intrusive_offset,intrusive));
fill(intr, magenta);

path uniq = box((intrusive_offset,0), (unique_offset,unique));
fill(uniq, heavyred);

real disp_eps = bench_width / 20.0;
draw(
(arrow_offset, linked)
-- (arrow_offset, linked + linked_disp)
-- (arrow_offset + disp_eps, linked + linked_disp)
-- (arrow_offset - disp_eps, linked + linked_disp)
-- (arrow_offset, linked + linked_disp)
-- (arrow_offset, linked - linked_disp)
-- (arrow_offset + disp_eps, linked - linked_disp)
-- (arrow_offset - disp_eps, linked - linked_disp)
-- (arrow_offset, linked - linked_disp)
, gray);
draw(
(linked_offset, shared)
-- (linked_offset, shared + shared_disp)
-- (linked_offset + disp_eps, shared + shared_disp)
-- (linked_offset - disp_eps, shared + shared_disp)
-- (linked_offset, shared + shared_disp)
-- (linked_offset, shared - shared_disp)
-- (linked_offset + disp_eps, shared - shared_disp)
-- (linked_offset - disp_eps, shared - shared_disp)
-- (linked_offset, shared - shared_disp)
, gray);
draw(
(shared_offset, intrusive)
-- (shared_offset, intrusive + intrusive_disp)
-- (shared_offset + disp_eps, intrusive + intrusive_disp)
-- (shared_offset - disp_eps, intrusive + intrusive_disp)
-- (shared_offset, intrusive + intrusive_disp)
-- (shared_offset, intrusive - intrusive_disp)
-- (shared_offset + disp_eps, intrusive - intrusive_disp)
-- (shared_offset - disp_eps, intrusive - intrusive_disp)
-- (shared_offset, intrusive - intrusive_disp)
, gray);
draw(
(intrusive_offset, unique)
-- (intrusive_offset, unique + unique_disp)
-- (intrusive_offset + disp_eps, unique + unique_disp)
-- (intrusive_offset - disp_eps, unique + unique_disp)
-- (intrusive_offset, unique + unique_disp)
-- (intrusive_offset, unique - unique_disp)
-- (intrusive_offset + disp_eps, unique - unique_disp)
-- (intrusive_offset - disp_eps, unique - unique_disp)
-- (intrusive_offset, unique - unique_disp)
, gray);

real label_delta = 0.05 * max(max(linked, shared), max(intrusive, unique));
label("linked\underline{\hspace{0.3cm}}ptr", (linked_offset - label_offset, linked + label_delta), black);
label("std::shared\underline{\hspace{0.3cm}}ptr", (shared_offset - label_offset, shared + label_delta), black);
label("boost::intruisive\underline{\hspace{0.3cm}}ptr", (intrusive_offset - label_offset, intrusive + label_delta), black);
label("std::unique\underline{\hspace{0.3cm}}ptr", (unique_offset - label_offset, unique + label_delta), black);
label("allocation/deallocation benchmark : ", (bench_width * 2.0, max_height * 1.1));
real linked = 178;
real shared = 357;
real intrusive = 195;
real unique = 178;
real linked_disp = 4;
real shared_disp = 9;
real intrusive_disp = 3;
real unique_disp = 4;path lin = box((arrow_offset,0), (linked_offset,linked));
fill(lin, black);

path sha = box((linked_offset,0), (shared_offset,shared));
fill(sha, black);

path intr = box((shared_offset,0), (intrusive_offset,intrusive));
fill(intr, black);

path uniq = box((intrusive_offset,0), (unique_offset,unique));
fill(uniq, black);

real disp_eps = bench_width / 20.0;
draw(
(arrow_offset, linked)
-- (arrow_offset, linked + linked_disp)
-- (arrow_offset + disp_eps, linked + linked_disp)
-- (arrow_offset - disp_eps, linked + linked_disp)
-- (arrow_offset, linked + linked_disp)
-- (arrow_offset, linked - linked_disp)
-- (arrow_offset + disp_eps, linked - linked_disp)
-- (arrow_offset - disp_eps, linked - linked_disp)
-- (arrow_offset, linked - linked_disp)
, gray);
draw(
(linked_offset, shared)
-- (linked_offset, shared + shared_disp)
-- (linked_offset + disp_eps, shared + shared_disp)
-- (linked_offset - disp_eps, shared + shared_disp)
-- (linked_offset, shared + shared_disp)
-- (linked_offset, shared - shared_disp)
-- (linked_offset + disp_eps, shared - shared_disp)
-- (linked_offset - disp_eps, shared - shared_disp)
-- (linked_offset, shared - shared_disp)
, gray);
draw(
(shared_offset, intrusive)
-- (shared_offset, intrusive + intrusive_disp)
-- (shared_offset + disp_eps, intrusive + intrusive_disp)
-- (shared_offset - disp_eps, intrusive + intrusive_disp)
-- (shared_offset, intrusive + intrusive_disp)
-- (shared_offset, intrusive - intrusive_disp)
-- (shared_offset + disp_eps, intrusive - intrusive_disp)
-- (shared_offset - disp_eps, intrusive - intrusive_disp)
-- (shared_offset, intrusive - intrusive_disp)
, gray);
draw(
(intrusive_offset, unique)
-- (intrusive_offset, unique + unique_disp)
-- (intrusive_offset + disp_eps, unique + unique_disp)
-- (intrusive_offset - disp_eps, unique + unique_disp)
-- (intrusive_offset, unique + unique_disp)
-- (intrusive_offset, unique - unique_disp)
-- (intrusive_offset + disp_eps, unique - unique_disp)
-- (intrusive_offset - disp_eps, unique - unique_disp)
-- (intrusive_offset, unique - unique_disp)
, gray);

real label_heigth=bench_width / 4.0;
label("heap allocation", (linked_offset - label_offset, label_heigth), white);
label("heap allocation", (shared_offset - label_offset, label_heigth), white);
label("heap allocation", (intrusive_offset - label_offset, label_heigth), white);
label("heap allocation", (unique_offset - label_offset, label_heigth), white);
107 changes: 107 additions & 0 deletions asy_files/copy.asy
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
settings.outformat = "pdf";

real linked = 12;
real shared = 48;
real intrusive = 10;
real unique = 0;
real linked_disp = 0;
real shared_disp = 0;
real intrusive_disp = 0;
real unique_disp = 0;real bench_width = 18.0;
real max_height = 48;

real arrow_offset = bench_width / 4.0 * 1.1;
real point_offset = arrow_offset * 2 / 3;
real linked_offset = arrow_offset + bench_width;
real shared_offset = arrow_offset + 2 * bench_width;
real intrusive_offset = arrow_offset + 3 * bench_width;
real unique_offset = arrow_offset + 4 * bench_width;
real label_offset = (shared_offset - linked_offset) / 2.0;

size(20cm,0);
draw((arrow_offset / 2, 0) -- (arrow_offset / 2, max_height),arrow=Arrow);

label(
scale(0.5) * ("" + string(linked) + ""),
(point_offset, linked),
black
);
label(
scale(0.5) * ("" + string(shared) + ""),
(point_offset, shared),
black
);
label(
scale(0.5) * ("" + string(intrusive) + ""),
(point_offset, intrusive),
black
);
label(
scale(0.5) * ("" + string(unique) + ""),
(point_offset, unique),
black
);
path lin = box((arrow_offset,0), (linked_offset,linked));
fill(lin, deepgreen);

path sha = box((linked_offset,0), (shared_offset,shared));
fill(sha, royalblue);

path intr = box((shared_offset,0), (intrusive_offset,intrusive));
fill(intr, magenta);

path uniq = box((intrusive_offset,0), (unique_offset,unique));
fill(uniq, heavyred);

real disp_eps = bench_width / 20.0;
draw(
(arrow_offset, linked)
-- (arrow_offset, linked + linked_disp)
-- (arrow_offset + disp_eps, linked + linked_disp)
-- (arrow_offset - disp_eps, linked + linked_disp)
-- (arrow_offset, linked + linked_disp)
-- (arrow_offset, linked - linked_disp)
-- (arrow_offset + disp_eps, linked - linked_disp)
-- (arrow_offset - disp_eps, linked - linked_disp)
-- (arrow_offset, linked - linked_disp)
, gray);
draw(
(linked_offset, shared)
-- (linked_offset, shared + shared_disp)
-- (linked_offset + disp_eps, shared + shared_disp)
-- (linked_offset - disp_eps, shared + shared_disp)
-- (linked_offset, shared + shared_disp)
-- (linked_offset, shared - shared_disp)
-- (linked_offset + disp_eps, shared - shared_disp)
-- (linked_offset - disp_eps, shared - shared_disp)
-- (linked_offset, shared - shared_disp)
, gray);
draw(
(shared_offset, intrusive)
-- (shared_offset, intrusive + intrusive_disp)
-- (shared_offset + disp_eps, intrusive + intrusive_disp)
-- (shared_offset - disp_eps, intrusive + intrusive_disp)
-- (shared_offset, intrusive + intrusive_disp)
-- (shared_offset, intrusive - intrusive_disp)
-- (shared_offset + disp_eps, intrusive - intrusive_disp)
-- (shared_offset - disp_eps, intrusive - intrusive_disp)
-- (shared_offset, intrusive - intrusive_disp)
, gray);
draw(
(intrusive_offset, unique)
-- (intrusive_offset, unique + unique_disp)
-- (intrusive_offset + disp_eps, unique + unique_disp)
-- (intrusive_offset - disp_eps, unique + unique_disp)
-- (intrusive_offset, unique + unique_disp)
-- (intrusive_offset, unique - unique_disp)
-- (intrusive_offset + disp_eps, unique - unique_disp)
-- (intrusive_offset - disp_eps, unique - unique_disp)
-- (intrusive_offset, unique - unique_disp)
, gray);

real label_delta = 0.05 * max(max(linked, shared), max(intrusive, unique));
label("linked\underline{\hspace{0.3cm}}ptr", (linked_offset - label_offset, linked + label_delta), black);
label("std::shared\underline{\hspace{0.3cm}}ptr", (shared_offset - label_offset, shared + label_delta), black);
label("boost::intruisive\underline{\hspace{0.3cm}}ptr", (intrusive_offset - label_offset, intrusive + label_delta), black);
label("std::unique\underline{\hspace{0.3cm}}ptr", (unique_offset - label_offset, unique + label_delta), black);
label("copy constructor benchmark : ", (bench_width * 2.0, max_height * 1.1));
Loading