Как делает memchr (), работают под капотом?

Проблема решена, как показано ниже:

@SpringBootApplication
@Slf4j
class ProRunner implements CommandLineRunner {

@Autowired
AnalyzeManager analyzeManager;

@Autowired
AuthService authService;

@Autowired
WriterService writerService;

    static void main(String[] args) {
        System.setProperty("spring.config.additional-location","credential from args");
        SpringApplication.run(ProRunner.class, args);        
}

@Override
void run(String... args) throws Exception {
    try {
        String token = authService.postEntity("url").token;
        Map dataSet = analyzeManager.bulkCreate();
        writerService.write(dataSet)
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

Добавлен новый файл конфигурации, как показано ниже:

@Configuration
public class ConfigProperties {

    @Value("${cred.username}")
    private String userName;
    @Value("${cred.password}")
    private String password;
    @Value("${date.startDate}")
    private String startDate;
    @Value("{team.id}")
    private String teamId;

    public String getUserName() {
        return userName;
    }

    public String getPassword() {
        return password;
    }

    public String getStartDate() {
        return startDate;
    }

    public String getTeamId() {
        return teamId;
    }
}

И позже для вызова свойств из другого класса:

@Autowired
private ConfigProperties configProperties;
[ 117] И назовите свойство так:

configProperties.getUserName();

Большое спасибо за вашу помощь @Barath, @Andrew S

11
задан dsimcha 27 August 2013 в 11:11
поделиться

4 ответа

Я предложил бы смотреть на источник libc's GNU. Что касается большинства функций, это будет содержать оба, что дженерик оптимизировал версию C функции и оптимизировал версии ассемблера для как можно большего количества поддерживаемой архитектуры, использовав в своих интересах машину определенные приемы.

Версия x86-64 SSE2 комбинирует результаты pcmpeqb на целой строке кэша данных сразу (четыре 16B векторы), для амортизации издержек раннего выхода pmovmskb/test/jcc.

gcc и лязг в настоящее время неспособны к автовекторизации циклов с if() break условия раннего выхода, таким образом, они делают наивный byte-at-a-time asm из очевидной реализации C.

12
ответ дан 3 December 2019 в 03:54
поделиться

Эта реализация memchr от newlib является одним примером чьей-то оптимизации memchr: это читает и тестирует 4 байта за один раз (кроме memchr, другие функции в newlib библиотеке здесь).

Кстати, большая часть исходный код для библиотеки времени выполнения MSVC доступен как дополнительная часть установки MSVC (так, Вы могли посмотреть на это).

7
ответ дан 3 December 2019 в 03:54
поделиться

Вот (BSD-лицензированный) memchr FreeBSD () от memchr.c. Браузер исходного кода FreeBSD онлайн является хорошей ссылкой для испытанных, BSD-лицензированных примеров кода.

void *
memchr(s, c, n)
    const void *s;
    unsigned char c;
    size_t n;
{
    if (n != 0) {
        const unsigned char *p = s;

        do {
            if (*p++ == c)
                return ((void *)(p - 1));
        } while (--n != 0);
    }
    return (NULL);
}
5
ответ дан 3 December 2019 в 03:54
поделиться

memchr как memset и memcpy обычно уменьшают до довольно небольшого количества машинного кода. Вы вряд ли сможете воспроизвести такую скорость, не встраивая подобный ассемблерный код. Одной главной проблемой для рассмотрения в реализации является выравнивание данных.

Одна универсальная техника, которую Вы можете использовать, состоит в том, чтобы вставить сигнальную метку в конце искавшей строки, который гарантирует, что Вы найдете его. Это позволяет Вам перемещать тест для конца строки из цикла, к после цикла.

2
ответ дан 3 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: