LINUX.ORG.RU

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

 

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

На Убунту 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
()

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

 , , ,

По стандарту, это можно, но вот на практике у меня на Убунту 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
()

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

 ,

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

#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 подписка на новые темы