Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что не так в этой функции ? / 21 сообщений из 21, страница 1 из 1
23.03.2015, 12:56
    #38913224
gera3323
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
size_t str_len( const char *str )
{
	const char *begin = str;
	
		while( *str != '\0' ) {

			str++;
		}

	return ( str - begin );
}

void main( void )
{
	char *text = "hello";

	cout<<str_len(text);

	cin.get();

	system("pause");
}
...
Рейтинг: 0 / 0
23.03.2015, 12:59
    #38913238
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
gera3323,

strlen или std::string::size не айс?
...
Рейтинг: 0 / 0
23.03.2015, 12:59
    #38913242
gera3323
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
NekZ,

нет
...
Рейтинг: 0 / 0
23.03.2015, 13:19
    #38913302
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
gera3323,

Если функция должна вернуть длину строки однобайтовых символов или символов в стиле UTF-8
в виде кол-ва байт -- то я ничего не вижу неправильного.

Разве что можно было бы добавить ещё проверку, что str != NULL.
...
Рейтинг: 0 / 0
23.03.2015, 13:35
    #38913346
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
MasterZivя ничего не вижу неправильного.
А использование в качестве итератора параметра вместо локальной переменной тебя не смущает?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.03.2015, 13:37
    #38913356
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
Лично меня смутило только то, что typeof(str - begin) == ptrdiff_t, а возвращается size_t, но здесь это не сможет навредить.
...
Рейтинг: 0 / 0
23.03.2015, 13:49
    #38913375
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
Dimitry SibiryakovА использование в качестве итератора параметра вместо локальной переменной тебя не смущает?..
Это обычная практика.
...
Рейтинг: 0 / 0
23.03.2015, 13:59
    #38913393
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
Anatoly MoskovskyЭто обычная практика.
Само по себе, чтобы отдельную переменную не заводить - да, практика обычная. Но тут-то
локальная переменная по-любому уже объявлена. Просто я сомневаюсь в интеллекте
компилятора. Вдруг он начнёт сохранять значение в память на каждой итерации?..
Локальную-то переменную ему проще догадаться сделать регистровой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.03.2015, 14:08
    #38913415
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
Dimitry SibiryakovПросто я сомневаюсь в интеллекте
компилятора.
Вопрос бы "что не так?", а не "как оптимизировать?" ))
...
Рейтинг: 0 / 0
23.03.2015, 14:12
    #38913424
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
Впрочем, я думаю что компилятор скопирует аргумент в регистр перед циклом.
...
Рейтинг: 0 / 0
23.03.2015, 14:18
    #38913435
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
Anatoly MoskovskyВопрос бы "что не так?", а не "как оптимизировать?" ))

Ну, как по мне, так неоптимальный код и есть "не так". Я слишком стар для модной нынче
тенденции создавать невозможно тормозные программы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.03.2015, 14:36
    #38913489
gera3323
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
Dimitry Sibiryakov,

а как оптимизировать ? так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
size_t str_len( const char  *str )
{
	const register char *first = str;
	
		while( *str++ != '\0' ) 
			;

	return ( str - first - 1 );
}
...
Рейтинг: 0 / 0
23.03.2015, 14:37
    #38913494
gera3323
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
gera3323,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
size_t str_len(  register const char *str )
{
	const char *first = str;
	
		while( *str++ != '\0' ) 
			;

	return ( str - first - 1 );
}
...
Рейтинг: 0 / 0
23.03.2015, 14:39
    #38913499
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
gera3323, думаю что оптимизацию можно закончить на самом первом исходнике.
Я не знаю кто от тебя требует такой глубины но дальше в оптимизации возможности
С++ заканчиваются и начинаются тонкости железной архитектуры. Ассемблер.
Системы команд и прочее.
...
Рейтинг: 0 / 0
23.03.2015, 14:43
    #38913512
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
Dimitry SibiryakovMasterZivя ничего не вижу неправильного.
А использование в качестве итератора параметра вместо локальной переменной тебя не смущает?..


Нет.
...
Рейтинг: 0 / 0
23.03.2015, 14:45
    #38913519
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
gera3323Dimitry Sibiryakov,

а как оптимизировать ? так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
size_t str_len( const char  *str )
{
	const register char *first = str;
	
		while( *str++ != '\0' ) 
			;

	return ( str - first - 1 );
}



Оптимизируют это вообще не так, а ассемблерной вставкой (одна комманда).

Но проблема в том, что я подозреваю, что реальные функции с таким назначением гораздо сложнее.
...
Рейтинг: 0 / 0
23.03.2015, 14:52
    #38913542
gera3323
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
MasterZiv,

спасибо.

исходник функции wcslen и strlen почти такой же
...
Рейтинг: 0 / 0
23.03.2015, 14:53
    #38913545
gera3323
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
MasterZiv,

за исключением return ( str - first - 1 );
...
Рейтинг: 0 / 0
23.03.2015, 15:16
    #38913598
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
MasterZivя подозреваю, что реальные функции с таким назначением гораздо сложнее.а чего там может быть "сложнее"? и захочешь, а не усложнишь )))
...
Рейтинг: 0 / 0
23.03.2015, 15:26
    #38913623
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
И опция register для современного компиллятора.... хм.. невкурсе но ЕМНИП опциональна.
...
Рейтинг: 0 / 0
23.03.2015, 15:56
    #38913668
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так в этой функции ?
register - всегда рекомендация.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что не так в этой функции ? / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]