Ничего C# не схлопнул на этапе компиляции, не надо наговаривать!
clock нормально вычисляет.
И там, и там одинаковое количество байт одинаково выделяется!
Количество системных вызовов можно уменьшить, просто выделив запас, и в дальнейшем выдавая указатель на уже ранее выделенный, свободный участок памяти (в этом запасе)!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PerfomanceTests {
public class PerfomanceTest {
public delegate void PerfomanceTestAction();
String title;
PerfomanceTestAction action;
int count;
public PerfomanceTest(String title, PerfomanceTestAction action, int count) {
this.action = action;
this.count = count;
this.title = title;
}
public long MeasurePerfomance() {
Stopwatch watch = new Stopwatch();
watch.Start();
int i = 0;
LABEL:
action();
i++;
if(i < count) goto LABEL;
watch.Stop();
return watch.ElapsedMilliseconds;
}
public void Run() {
WriteLine("Perfomance of "+title +": " + MeasurePerfomance()+" ms");
}
}
class Program {
class T {
byte c;
}
static void Main(string[] args) {
new PerfomanceTest("MAlloc", PFMAlloc, 10000000).Run();
Console.WriteLine("End!");
Console.ReadLine();
}
static byte[] x;
static void PFMAlloc() {
x = new byte[100];
//new T();
}
}
}
#include <iostream>
#include <string.h>
#include <random>
#include <time.h>
#include <string>
#include <sstream>
void TestPF(void func(), size_t count) {
size_t i = 0;
clock();
int time0 = clock();
while(i < count) {
func();
i++;
};
int time = clock()-time0;
printf( "Time=" );
printf( "%i\n", time );
};
void PFMAlloc() {
malloc(100);
}
int main() {
TestPF(PFMAlloc, 10000000);
return 0;
}
и не надо тут разводить, типа шарп медленнее в этом вопросе
нет, там не вся память выделяется. а кусками.
и это не так просто как ты думаешь. это надо хорошо подумать как сделать.
clock нормально вычисляет.
И там, и там одинаковое количество байт одинаково выделяется!
Количество системных вызовов можно уменьшить, просто выделив запас, и в дальнейшем выдавая указатель на уже ранее выделенный, свободный участок памяти (в этом запасе)!
и не надо тут разводить, типа шарп медленнее в этом вопросе
Выделение объекта с полем 1 байт в 3.736 быстрее, а выделение массива 100 байт в 3.004 раз быстрее.