Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
std::vector создавать со своим собственным аллокатором.#include "timeval.h"
#ifndef HAVE_GETTIMEOFDAY
#ifdef WIN32
#include <mmsystem.h>
static int gettimeofday(struct timeval *tp, void *nothing)
{
#ifdef WITHOUT_MM_LIB
SYSTEMTIME st;
time_t tt;
struct tm tmtm;
/* mktime converts local to UTC */
GetLocalTime (&st);
tmtm.tm_sec = st.wSecond;
...
tmtm.tm_year = st.wYear - 1900;
tmtm.tm_isdst = -1;
tt = mktime (&tmtm);
tp->tv_sec = tt;
tp->tv_usec = st.wMilliseconds * 1000;
#else
/** Time calculations using GetLocalTime had a time resolution of 10ms.The timeGetTime, part
** of multimedia apis offer a better time resolution of 1ms.Need to link against winmm.lib **/
unsigned long Ticks = 0;
unsigned long Sec =0;
unsigned long Usec = 0;
Ticks = timeGetTime();
Sec = Ticks/1000;
Usec = (Ticks - (Sec*1000))*1000;
tp->tv_sec = Sec;
tp->tv_usec = Usec;
#endif /* WITHOUT_MM_LIB */
(void)nothing;
return 0;
}
#else /* WIN32 */
/* non-win32 version of Curl_gettimeofday() */
static int gettimeofday(struct timeval *tp, void *nothing)
{
(void)nothing; /* we don't support specific time-zones */
tp->tv_sec = (long)time(NULL);
tp->tv_usec = 0;
return 0;
}
#endif /* WIN32 */
#endif /* HAVE_GETTIMEOFDAY */
LARGE_INTEGER li;
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
li.HighPart = ft.dwHighDateTime;
li.LowPart = ft.dwLowDateTime;
tp->tv_sec = (long)(li.QuadPart / 10000000LL); // 10^7 as in 100ns units
tp->tv_usec = (long)((li.QuadPart % 10000000LL) / 10);
Теперь программа хочет сделать mmap. Она передаёт адрес, который больше end_data_segement с этого момента [addr;addr+length] становится доступным (в соотв. с флагами) для приложения?Адрес — это совет. Какой именно адрес вернёт
mmap — это решает система. И он не обязан начинаться сразу за концом «сегмента данных».Т.е. в сегменте данных образуется дыра?А это не сегмент данных. Это память, которая теперь стала доступна приложению.
зато позволяет например уменьшить количество access violation, при недобросовестном использовании.
free забивает освобожденную память определенной дрянью, как раз чтобы проще и быстрее выявить такой доступ к ней познее. Проблема в том, что не все из этой области (seg fault) можно поймать на стадии разработки и/или в дебаге. О, интересно: проприетарностью кода оправдывают «невысокое» качество этого «кода».А вот передергивать не надо — где я это написал? — проприетарность кода часто есть невозможность заглянуть в исходники. Остальное ваши домыслы…
… это прошлый век. Берите современные инструменты, например, AddressSanitizer.Вы это мне? Вы там слово например видимо незаметили.
int main(void)
{
const int blockCount = 1024;
const int blockSize = 1024*1024;
char **buf;
for (int q=0; i<100000; i++)
{
buf = (char**)malloc(blockCount*sizeof(char*));
for (int i=0; i<size; i++)
{
buf[i] = (char*)malloc(blockSize*sizeof(char));
}
for (int i=0; i<size; i++)
{
free(buf[i]);
}
free(buf);
}
printf("Hit something...\n");
printf("Memory freed\n");
getchar();
return 0;
}
Как malloc память ест