LINUX.ORG.RU

Сообщения leanid-chaika

 

Ошибка в с++ 11 после обновления компилятора и возврата обратно

Форум — Development

На Убунту 13.04 поставил последний компилятор gcc4.7.3-2 из сторонних репозиториев, снес, и вернул назад все из офицального (gcc4.7.3-1), но проблема появилась, неверно работать начал std::chrono. Все что знал переставил, но проблема осталась, что можете подсказать? Заранее благодарю.

#include <iostream>
#include <chrono>
#include <thread>
using namespace std;

int main() {
	typedef std::chrono::duration<double> seconds_type;

	const auto& start_time = std::chrono::high_resolution_clock::now();
	cout << "start waiting for 3 seconds" << endl;
	this_thread::sleep_for(seconds_type(3));
	const auto& finish_time = std::chrono::high_resolution_clock::now();
	const auto& time_wait = finish_time - start_time;
	const auto& time_wait_sec = std::chrono::duration_cast<std::chrono::seconds>(time_wait);
	const auto& time_wait_double_sec = std::chrono::duration_cast<seconds_type>(time_wait);
	cout << "time_wait: " << time_wait.count() << "\n";
	cout << "seconds: " << time_wait_sec.count() << "\n";
	cout << "seconds double: " << time_wait_double_sec.count();
	return 0;
}
Результат выполнения на моей машине:
start waiting for 3 seconds
time_wait: 3000177
seconds: 0
seconds double: 0.00300018
Хотя я надеюсь что секунды будут равны 3.

leanid-chaika
()

Можно ли узнать о том, что закончилась память в с++ на практике?

Форум — Development

По стандарту, это можно, но вот на практике у меня на Убунту 13.04 и g++ 4.7.3 следующая программа просто убивается (ядром как я понимаю). Я же расчитывал что по коду возврата смогу понять, что именно происходит, но код возврата всегда равен 137. Заранее благодарю.

#include <iostream>
#include <new>
#include <cstdlib>

void no_more_ram()
{
	exit(3);
}

int main()
{
	std::set_new_handler(no_more_ram);
	std::cout << "!!!Hello World!!!" << std::endl; // prints !!!Hello World!!!

	try
	{
		while (true)
		{
			int* p= new int[1024 * 1024];
			if (!p)
			{
				exit(4);
			}
		}
	} catch (const std::bad_alloc& ex)
	{
		return 1;
	} catch (...)
	{
		return 2;
	}

	return 0;
}

 , , ,

leanid-chaika
()

Как окружение влияет на количество доступных файловых дескрипторов?

Форум — Development

Из любопытства написал:

#include <cstdio>
using namespace std;

int main() {
	printf("start test fd\n");

	size_t counter = 0u;
	while(true)
	{
		if (char* file_name = tmpnam(NULL))
		{
			if (FILE* f = fopen(file_name, "wb"))
			{
				fwrite("hello", 5, 1, f);
				++counter;
			} else
			{
				break;
			}
		} else
		{
			break;
		}
	}

	printf("can open %ld files simultaneously\n", counter);

	return 0;
}

Запустил этот код напрямую из эклипса получил 4093 файловый дескриптора, запустил руками из консоли получил 1021, я так понимаю, что три стандартных файловых потока резервируются, но почему это не совпадает? Заранее благодарю, если кто подскажет, или где прочитать про такое.

Забыл указать, балуюсь на Ubuntu 13.04 64bit

 ,

leanid-chaika
()

RSS подписка на новые темы