Memory leak with dynamic array
bearophile
bearophileHUGS at lycos.com
Sat Apr 10 14:19:17 PDT 2010
Few dynamic array benchmarks that can show you more differences between C++ and D2.
Timings dmd, N=5_000_000, NLOOPS=15, T=double, seconds:
C++ v1: 0.67
C++ v1: 0.72
D v1: 6.47 (uses >1 GB RAM)
D v2: 0.76
D v3: 5.25
dmd v2.043, dmd -O -release -inline
g++ 4.4.1, -O3 -Wall -s
-----------------
// D v.1
import std.c.stdio: printf;
void main() {
alias double T;
enum int N = 5_000_000;
enum int NLOOPS = 15;
T[] arr;
arr.length = N;
foreach (i; 0 .. NLOOPS) {
arr.length = 0;
foreach (j; 0 .. N)
arr ~= j;
printf("At iteration %d, arr has %u elements.\n", i, arr.length);
}
}
-----------------
// D v.2
import std.c.stdio: printf;
void main() {
alias double T;
enum int N = 5_000_000;
enum int NLOOPS = 15;
auto arr = new T[N];
foreach (i; 0 .. NLOOPS) {
uint arr_len = 0;
foreach (j; 0 .. N) {
arr[arr_len] = j;
arr_len++;
}
printf("At iteration %d, arr has %u elements.\n", i, arr_len);
}
}
-----------------
// D v.3
import std.c.stdio: printf;
void main() {
alias double T;
enum int N = 5_000_000;
enum int NLOOPS = 15;
T[] arr;
arr.reserve(N);
foreach (i; 0 .. NLOOPS) {
arr.length = 0;
arr.assumeSafeAppend;
foreach (j; 0 .. N)
arr ~= j;
printf("At iteration %d, arr has %u elements.\n", i, arr.length);
}
}
-----------------
// C++ v.1
#include "stdio.h"
#include <vector>
int main() {
typedef double T;
const int N = 5000000;
const int NLOOPS = 15;
std::vector<T> arr;
arr.reserve(N);
for (int i = 0; i < NLOOPS; i++) {
arr.clear();
for (int j = 0; j < N; j++)
arr.push_back(j);
printf("At iteration %d, arr has %u elements.\n", i, arr.size());
}
}
-----------------
// C++ v.2
#include "stdio.h"
#include <vector>
int main() {
typedef double T;
const int N = 5000000;
const int NLOOPS = 15;
std::vector<T> arr(N);
for (int i = 0; i < NLOOPS; i++) {
size_t arr_len = 0;
for (int j = 0; j < N; j++) {
arr[arr_len] = j;
arr_len++;
}
printf("At iteration %d, arr has %u elements.\n", i, arr_len);
}
}
-----------------
Bye,
bearophile
More information about the Digitalmars-d-learn
mailing list